如果我有一个带有已知文件描述符的打开文件,那么使用fstat()
和stat()
有什么优点?为什么不只有一个功能?
int fstat(int fildes, struct stat *buf)
int stat(const char *path, struct stat *buf)
最佳答案
如前所述,stat()
适用于文件名,而fstat()
适用于文件描述符。
为什么要有两个功能?
一个因素可能是便利。能够对从代码其他部分获得的文件描述符进行fstat()
,而不必也传递文件名,这真是太好了。
不过,主要原因是安全性。如果先对文件进行stat()
,然后再对其进行open()
,则之间会有一小段时间间隔,在这段时间内可以修改文件(或更改其权限等)或将其替换为符号链接(symbolic link)。fstat()
避免了该问题。您首先用open()
文件,然后不能再将其交换到脚下。然后输入fstat()
,可以确定文件正确。
关于c - 使用fstat()与stat()有什么优点?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23169241/