Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42136
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 101
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-16 20:46
文章分类
文章存档

2015年(10)

分类: LINUX

2015-11-20 20:22:18

一. 函数原型及具体数据结构:

点击(此处)折叠或打开

  1. #include <sys/stat.h>

  2. int stat(const char *retrict pathname, struct stat *restrict buf);
  3. int fstat(int fd, struct stat *buf);
  4. int lstat(const char *restrict pathname, struct stat *restrict buf);
  5. int fstatat(int dirfd, const char *restrict pathname, struct stat *restrict buf, int flag);

  6. 所有四个函数返回值:成功返回0,出错返回-1.
其中buf指针为结构体指针,其结构如下:

点击(此处)折叠或打开

  1. struct stat {
  2.       dev_t st_dev; /* device number (file system) */
  3.       dev_t st_rdev; /* device number for special files */
  4.       ino_t st_ino; /* inode number (serial number)*/
  5.       mode_t st_mode; /* file type & mode (permissions) */
  6.       nlink_t st_nlink; /* number of hard links */
  7.       uid_t st_uid; /* user ID of owner */
  8.       gid_t st_gid; /* group ID of owner */
  9.       off_t st_size; /* size in bytes, for regular files */
  10.       blksize_t st_blksize; /* best IO block size*/
  11.       blkcnt_t st_blocks; /* number of 512B blocks allocated */
  12.       struct timespec st_atime; /* time of last access */
  13.       struct timespec st_mtime; /* time of last modification */
  14.       struct timespec st_ctime; /* time of last status change */
  15. };
结构体中的结构体成员timespce分别包含以秒和纳秒为单位定义的时间,timespec提供更高的时间戳:结构如下:

点击(此处)折叠或打开

  1. struct timespec{
  2.     time_t tv_sec ;
  3.     long tv_nsec;
  4. };
二. stat族函数各自用途:
1.stat函数能根据pathname得到以此name命名的文件的信息结构。

2.lstat能够根据pathname得到以此name命名的*连接文件*的信息结构。
--> 注意:lstat列出的是符号连接文件本身,而不是连接引用的文件。
--> 用途:需要以降序遍历目录层次结构时。

3.fstatat根据文件描述符得到相应文件的信息结构。

4.fstatat函数操作的函数为:由fd参数指向的相对于当前打开目录的路径名,返回文件统计信息。
参数:
(1). dirfd: 如果该参数被设置为AT_FDCWD时有以下两种情况:
--> 当pathname为相对路径时:fstatat会自己计算pathname相对于但当前目录的参数。
--> 当pathname为绝对路径时:dirfd参数会被丢弃。

(2). flag:该参数控制着是否跟随着一个符号连接,如下:
--> flag默认情况下,fstata函数返回符号连接指向的实际文件信息。
--> 当AT_SYMLINK_NOFOLLOW标志被设置,fstata不跟随符号连接,而回返回符号连接本身信息。

强大的fstatat:
fstatat函数通过改变flag参数的值,可以分别实现其余stat族函数的功能。

三. 实际应用:
stat族函数使用最多的地方可能就是ls -l命令,此命令可以获得当前目录下的文件所有信息。

http://blog.csdn.net/riyadh_linux/article/details/49935819

阅读(1622) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~