Ras*_*ril 8 c file system-calls stat fstat
如果我有一个已知的文件描述符打开的文件,什么是使用的优点fstat(),对stat()?为什么不只有一个功能?
int fstat(int fildes, struct stat *buf)
int stat(const char *path, struct stat *buf)
Run Code Online (Sandbox Code Playgroud)
Chr*_*ger 16
如上所述,stat()适用于文件名,同时fstat()适用于文件描述符.
为什么有两个功能呢?
一个因素可能是方便.能够fstat()获得从代码的其他部分获得的文件描述符,而不必传递文件名,这很好.
但主要原因是安全性.如果你是第stat()一个文件然后open()它,那么文件可以被修改(或者其权限被更改等)或者用符号链接替换之间有一个小的时间窗口.
fstat()避免这个问题.你首先open()是文件,然后文件不能再在你脚下交换了.然后你fstat()和你可以确定你有正确的文件.
fstat与通过调用获得的文件描述符一起使用open。它的主要功能是获取已打开的文件描述符的信息,而不是重新打开。
您还可以像这样使用处理程序(省略错误处理)fstat:FILE
FILE *fp = fopen("/path/to/file", "r");
struct stat st;
fstat(fileno(fp), &st);
Run Code Online (Sandbox Code Playgroud)