Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1814767
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

2012-03-28 13:08:41

这章的讨论主要集中在这三个stat函数,以及它们返回的信息。


  1. #include <sys/stat.h>

  2. int stat(const char *restrict pathname, struct stat *restrict buf);

  3. int fstat(int filedes, struct stat *buf);

  4. int lstat(const char *restrict pathname, struct stat *restrict buf);

  5. 三个函数成功都返回0,错误都返回-1。

给定一个路径名,stat函数返回一个关于名字对应的文件的信息。fstat函数得到关于已经在描述符filedes上打开的文件的信息。lstat函数 与stat相似,但当文件是一个符号链接时,lstat函数返回关于符号链接的信息,而不是其所指向的文件。(我们在4.21节遍历目录结构时会用到 lstat。在4.16节会更深入讲述符号链接。)


第二个参数是一个指向一个我们必须提供的结构体的指针。函数填充buf指向的结构体。结构体的定义在不同实现间会有不同,但它看起来大概是:


  1. struct stat {
  2.   mode_t st_mode; /* 文件类型和模式(权限) */
  3.   ino_t st_ino; /* i-node号(序列化号) */
  4.   dev_t st_dev; /* 设备号(文件系统) */
  5.   dev_t st_rdev; /* 特殊文件的设备号 */
  6.   nlink_t st_nlink; /* 链接的数量 */
  7.   uid_t st_uid; /* 属主的用户ID */
  8.   git_t st_gid; /* 属主的组ID */
  9.   off_t st_size; /* 普通文件的以字节为单位的尺寸 */
  10.   time_t st_atime; /* 最后访问时间 */
  11.   time_t st_mtime; /* 最后修改时间 */
  12.   time_t st_ctime; /* 最后文件状态改变时间 */
  13.   blksize_t st_blksize; /* 最好的I/O块尺寸 */
  14.   blkcnt_t st_blocks; /* 分配的磁盘块的数量 */
  15. };

st_rdev、st_blksize和st_blocks域并不是POSIX.1所要求的。它们定义在SUS的XSI扩展里。

注意每个成员都由原始系统数据类型指定。我们将会遍历这个结构体的每个成员来检查一个文件的属性。

stat函数的最大的用户很可能是ls -l命令,用来知道一个文件的所有信息。

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