原创 14.9.2读取一个文件的属性

2008-7-3 22:38 3841 8 8 分类: 工程师职场

我们使用函数statfstatlstat来检查文件的属性。这些函数使用struct stat对象来返回属性信息。所有这三个函数声明在头文件‘sys/stat.h’中。


Int   stat(const char *filename, struct stat *buf)                              函数


Stat函数返回buf指向的结构体中filename项中保存的文件名的文件的属性信息。如果filename项是一个符号链接,你得到的是链接指向的文件的属性信息。如果链接指向一个不存在的文件,则stat函数会报告一个文件不存在的失败消息。


如果操作成功的话,该函数返回值为0,失败则返回-1。除了通常的文件名错误外,还定义有如下的errno出错条件。


ENOENT              filename命名的文件不存在


如果使用_FILE_OFFSET_BITS==64来编译时,该函数实际上是stat64,因此使用大型文件支持的接口代替普通的实现。


Int   stat64(const char *filename, struct stat64 *buf)                                     函数


此函数与函数stat类似,区别在于它能够在32位系统上处理大小大于231的文件。为了达到效果,结果保存在一个struct stat64类型的变量中,就是buf指针指向的变量。当源代码中使用_FILE_OFFSET_BITS==64来编译时,该函数在使用stat为函数名时也有效,当然在32位机器代替小文件的接口。


Int   fstat(int filedes,struct stat *buf)                                函数


Fstat函数与stat函数类似,只是在打开一个文件时使用文件描述符代替文件名做为参数。详情查看Chapter 13【低级输入输出】。像stat函数一样,fstat函数调用成功返回值为0,失败则返回-1。下述errno错误情况针对fstat定义的:


EBADF          filedes参数是一个无效的文件描述符。


如果使用_FILE_OFFSET_BITS==64来编译时,该函数实际上是stat64,因此使用大型文件支持的接口代替普通的实现。


Int   fstat64(int filedes, struct stat64 *buf)                        函数


此函数与函数fstat类似,区别在于它能够在32位系统上处理大小大于231的文件。因为大型文件的文件描述符一般通过open64或者creat64来获得。Buf指针指向的变量类型是struct stat64,用于代表大型文件。当源代码中使用_FILE_OFFSET_BITS==64来编译时,该函数在使用stat为函数名时也有效,当然在32位机器代替小文件的接口。


Int   lstat(const char *filename, struct stat *buf)                函数


Lstat函数与stat函数类似,区别在于lstat函数不对符号链接进行追踪。如果参数filename是一个符号链接名,lstat函数仅仅返回链接本身的信息。详情查看Section 14.5【符号链接】,否则lstat函数与stat函数作用相同。


如果使用_FILE_OFFSET_BITS==64来编译时,该函数实际上是stat64,因此使用大型文件支持的接口代替普通的实现。


Int   lstat64(const char *filename, struct stat64 *buf)         函数


此函数与函数stat类似,区别在于它能够在32位系统上处理大小大于231的文件。为了达到效果,结果保存在一个struct stat64类型的变量中,就是buf指针指向的变量。当源代码中使用_FILE_OFFSET_BITS==64来编译时,该函数在使用stat为函数名时也有效,当然在32位机器代替小文件的接口。

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条