int fstat(int filedes, struct stat *buf);
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);
一眼就能看出来fstat的第一个参数是和另外两个不一样的,fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的是 一个“文件描述符”,而另外两个则直接接受“
文件全路径”。文件描述符是需要我们用open系统调用后才能得到的,而文件全路经直接写就可以了。
stat和lstat的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的信息。(这样记,lstat比stat多了一个l,因此它是
有本事处理符号链接文件的,因此当遇到符号链接文件时,lstat当然不会放过。而 stat系统调用没有这个本事,它只能对符号链接文件睁一只眼闭一只眼,直接去处理链接所指
文件喽)
- /*
- * Linux文件属性结构体信息
- * struct stat
- * {
- * dev_t st_dev;//设备
- * ino_t st_ino;//结点
- * mode_t st_mode;//模式
- * nlink_t st_nlink;//硬连接
- * uid_t st_uid;//用户ID
- * gid_t st_gid;//组ID
- * dev_t st_rdev;//设备类型
- * off_t st_off;//文件字节数
- * unsigned long st_blksize;//块大小
- * unsigned long st_blocks;//块数
- * time_t st_atime;//最后一次访问时间
- * time_t st_mtime;//最后一次修改时间
- * time_t st_ctime;//最后一次属性改变时间
- * }
- * 可通过stat或fstat函数获得文件的其他属性
- * stat函数用来判断没有打开的文件,而fstat函数用来判断打开的文件。
- *
- */
- #include <unistd.h>
- #include <sys/stat.h>
- int main(void)
- {
- struct stat buf;
- stat("/etc/passwd",&buf);
- /*
- * stat函数
- * 取得文件的属性
- * sys/stat.h,unistd.h
- * int stat(const char *file_name,struct stat*buf);
- * 将参数file_name所指的文件状态复制到参数buf所指的结构中
- * 成功返回0,失败返回-1,错误存储于errno
- */
- printf("/etc/passwd文件的大小是:%d/n",buf.st_size);
- printf("/etc/passwd文件的最后一次修改时间是:%d/n",buf.st_ctim);
- return 0;
- }