使用fstat()和stat()有什么好处?

时间:2014-04-19 11:09:21

标签: c file system-calls stat fstat

如果我有一个包含已知文件描述符的打开文件,那么使用fstat()stat()相比有什么好处?为什么只有一个功能?

int fstat(int fildes, struct stat *buf)

int stat(const char *path, struct stat *buf)

5 个答案:

答案 0 :(得分:14)

如上所述,stat()适用于文件名,而fstat()适用于文件描述符。

为什么有两个功能?

一个因素可能是方便。很高兴能够fstat()从代码的其他部分获得的文件描述符,而不必传递文件名。

主要原因是安全性。如果您首先stat()该文件然后open()它,那么文件可以被修改(或者其权限已更改等)或用符号链接替换之间有一个小的时间窗口。

fstat()避免了这个问题。您首先open()该文件,然后该文件无法再在您脚下换出。然后你fstat(),你可以确定你有正确的文件。

答案 1 :(得分:3)

fstat将与通过open调用获得的文件描述符一起使用。

也就是说,如果使用FILE *fpfopen打开了struct stat st,您就可以使用fstat,如下所示:fstat(fileno(fp), &st);

答案 2 :(得分:1)

如果您有文件描述符,则不一定知道路径(例如,当应用程序的其他部分打开文件时)。

如果您知道路径,则无需为了调用open而调用fstat来获取文件描述符。

答案 3 :(得分:0)

如果查看man fstat,您会看到以下内容:

  

fstat()与stat()相同,只是要进行统计的文件是   由文件描述符fd。

指定

要扩展一点,如果您碰巧有文件描述符而不是文件路径,则可以使用fstat

关于函数提供的信息,它们在字面上完全相同,正如您从上面的引用中可以看到的那样。

答案 4 :(得分:0)

如果你只有文件的文件描述符(但你可能不知道它的路径),那么你可以使用fstat();如果你只有一个文件的路径,那么你可以直接使用stat(),不需要先打开它。