文件和目录之stat族函数<stat | fstat | lstat | fstatat>——APUE学习笔记(2)

原创 2015年11月19日 23:08:00

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

#include <sys/stat.h>

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

所有四个函数返回值:成功返回0,出错返回-1.

其中buf指针为结构体指针,其结构如下:

struct stat {
      dev_t            st_dev;         /* device number (file system) */
      dev_t            st_rdev;        /* device number for special files */
      ino_t            st_ino;         /* inode number (serial number)*/
      mode_t           st_mode;        /* file type & mode (permissions) */
      nlink_t          st_nlink;       /* number of hard links */
      uid_t            st_uid;         /* user ID of owner */
      gid_t            st_gid;         /* group ID of owner */
      off_t            st_size;        /* size in bytes, for regular files */
      blksize_t        st_blksize;     /* best IO block size*/
      blkcnt_t         st_blocks;      /* number of 512B blocks allocated */
      struct timespec  st_atime;       /* time of last access */
      struct timespec  st_mtime;       /* time of last modification */
      struct timespec  st_ctime;       /* time of last status change */
};

结构体中的结构体成员timespce分别包含以秒和纳秒为单位定义的时间,timespec提供更高的时间戳,结构如下:

struct timespec{
    time_t tv_sec ;
    long   tv_nsec;
};

二. stat族函数各自用途:


a.stat函数能根据pathname得到以此name命名的文件的信息结构。


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


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


d.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命令,此命令可以获得当前目录下的文件所有信息。

版权声明:本文为博主原创文章,未经博主允许不得转载。

《unix环境高级编程》 读书笔记 (2)

近来读书,做些笔记,来年好翻翻。 本文所使用的操作系统为 CentOS7.0,如果不想装双系统的可以装虚拟机,可以参考这里: http://blog.csdn.net/alex_my/articl...
  • alex_my
  • alex_my
  • 2014年09月10日 18:20
  • 2862

fstat函数

stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。 1 首先隆重介绍的是一个非常重要的”VIP”人物,他是...

系统调用 stat(), fstat(), lstat() 函数

stat函数讲解 表头文件:    #include                      #include 定义函数:    int stat(const char *...
  • edonlii
  • edonlii
  • 2014年03月12日 15:21
  • 1928

C语言:stat,fstat和lstat函数

这三个函数的功能是一致的,都用于获取文件相关信息,但应用于不同的文件对象。对于函数中给出pathname参数,stat函数返回与此命名文件有关的信息结构,fstat函数获取已在描述符fields上打开...

C语言中fstat、stat和lstat 区别

在写应用程序的时候发现我们经常回去检测一个文件的大小,有了大小才能映射这个文件到内存上,方便我们直接操作。 在介绍三者的区别之前,首先介绍的是一个非常重要的结构体类型,名字叫做struct stat,...

fstatat()函数 Unix/Linux

fstatat - 得到相对文件的状态到一个目录文件描述符 内容简介 #include int fstatat(int dirfd, const char *path, struct stat ...

函数stat,fstat,fstatat和lstat

# include int stat(const char *restrict pathname, struct stat *restrict buf); int fstat(int fd, str...

文件和目录之stat族函数<stat | fstat | lstat | fstatat>——APUE学习笔记(2)

一. 函数原型及具体数据结构: #include int stat(const char *retrict pathname, struct stat *restrict buf); int fs...

【Linux学习笔记】获取文件属性 — stat()、fstat()、lstat()小结

Linux是基于文件的操作系统,一切皆文件。下面就详细的整理一下关于Linux文件属性的内容。 一、文件属性函数 系统提供了3个获取文件属性的函数,分别是:stat()、fstat()、lstat...

linux系统编程-学习笔记3-dup/dup2/stat/lstat/fstat

/*文件重定向:用于文件共享*/ int dup(int oldfd); int newfd = dup(oldfd) 把文件描述符newfd重定向到文件描述符oldfd指向的文件,之后,可以通过ne...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:文件和目录之stat族函数<stat | fstat | lstat | fstatat>——APUE学习笔记(2)
举报原因:
原因补充:

(最多只允许输入30个字)