c-使用fstat()和stat()有什么优点



如果我有一个具有已知文件描述符的打开文件,那么使用fstat()与使用stat()相比有什么优势?为什么没有一个函数?

int fstat(int fildes, struct stat *buf)
int stat(const char *path, struct stat *buf)
如前所述,stat()处理文件名,而fstat()处理文件描述符。

为什么有两个函数?

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

不过,主要原因是安全性。如果您先stat()文件,然后open()文件,那么在两个时间窗口之间,文件可能会被修改(或更改其权限等)或替换为符号链接。

fstat()避免了这个问题。你先open()这个文件,然后这个文件就不能再交换了。然后你fstat(),你可以确保你有正确的文件。

fstat将与通过open调用获得的文件描述符一起使用。它的主要功能是获取已经打开的文件描述符的信息,而不是重新打开。

您也可以将fstatFILE处理程序一起使用,如下所示(省略错误处理):

FILE *fp = fopen("/path/to/file", "r");
struct stat st;
fstat(fileno(fp), &st);

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

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

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

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

为了稍微扩展一点,如果碰巧有一个文件描述符而不是文件路径,则可以使用fstat

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

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

相关内容

  • 没有找到相关文章

最新更新