当前位置: 技术问答>linux和unix
请问Stat函数的使用和工作原理
来源: 互联网 发布时间:2016-06-22
本文导语: 现在在看程序,碰到了在判断文件是否存在是的时候调用了stat这个函数来进行判断,但是我对这个函数的使用还是不怎么明白,请大家使用国这个函数的出来给小弟我指导一下:例如 int fileExists(char *fullPath) { ...
现在在看程序,碰到了在判断文件是否存在是的时候调用了stat这个函数来进行判断,但是我对这个函数的使用还是不怎么明白,请大家使用国这个函数的出来给小弟我指导一下:例如
int fileExists(char *fullPath)
{
struct stat statbuf;
if(!stat(fullPath, &statbuf))
return 1;
return 0;
}
怎么这样传路径过来就可以判断呢?
谢谢
int fileExists(char *fullPath)
{
struct stat statbuf;
if(!stat(fullPath, &statbuf))
return 1;
return 0;
}
怎么这样传路径过来就可以判断呢?
谢谢
|
stat函数原型是:
int stat(const char *restrict pathname, struct stat *restrict buf);
这个函数的作用绝对不仅仅是判断文件是否存在,想要判断是否存在用open函数岂不是更简单,
这个函数的作用是取得指定文件的相关属性,
结果保存在传入的第二个参数中,struct stat结构体用来描述文件属性,具体定义可以查看man,
其中两个比较有用的域是st_size和st_mode,
st_size用来指明文件尺寸,st_mode用来指明文件类型,可以用S_IS×××宏定义来判断(好像是这么写的,长时间不用,有点忘记了)
int stat(const char *restrict pathname, struct stat *restrict buf);
这个函数的作用绝对不仅仅是判断文件是否存在,想要判断是否存在用open函数岂不是更简单,
这个函数的作用是取得指定文件的相关属性,
结果保存在传入的第二个参数中,struct stat结构体用来描述文件属性,具体定义可以查看man,
其中两个比较有用的域是st_size和st_mode,
st_size用来指明文件尺寸,st_mode用来指明文件类型,可以用S_IS×××宏定义来判断(好像是这么写的,长时间不用,有点忘记了)
|
open 或者 stat都不能准确判断文件是否存在:
open : 目录的某一级或者文件本身的权限与open的参数不一致,都可能返回EACCESS,
如果文件描述符数目超过限制,会返回错误,EMFILE或者ENFILE,。。。。
还有很多了。这时都无法判断文件是否存在
stat : 目录的某一级不允许搜索会返回EACCESS,还有其他一些错误。。。
这种情况下都无法判断文件是否存在。
总的来说,要判断文件是否存在,stat的情况要简单的多,比用open要好