如果我有一个带有已知文件描述符的打开文件,那么使用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/

10-11 18:07