UNIX环境高级编程复习——文件和目录(1)

来源:互联网 发布:剑网3菊花插件数据 编辑:程序博客网 时间:2024/05/23 21:45

stat函数、fstat和lstat函数

#include<sys/stat.h>int stat(const char *restrict pathname,struct stat *restruct buf);int fstat(int filedes,struct stat *buf);int lstat(const char *pathname,struct sat *restrict buf);

                       三个函数的返回值:若成功则返回0,出错则返回-1。

一旦给出pathname,stat函数就返回与此命名文件有关的信息结构。fstat函数获取已在描述符filedes上打开的文件的相关的信息。lstat和stat类似,但当命名的文件时一个符号链接时,lstat返回该符号链接的有关的信息,而不是该符号链接引用文件信息。

   第二个参数buf是指针,它指向一个我们必须提供的结构。其基本形式是:

struct stat{  mode_t    st_mode;//文件的类型和权限  ino_t     st_ino;//文件的i节点号  dev_t     st_dev;  dev_t     st_rdev;  nlink_t   st_nlink;//文件的硬链接数  uid_t     st_uid;//文件所有者ID  gid_t     st_gid;//文件所有者所属组ID  off_t     st_size;  time_t    st_atime;//文件最后访问时间  time_t    st_mtime;//文件最后一次的修改时间  time_t    st_ctime;//文件状态最后一次修改时间  blksize_t st_blksize;  blkcnt_t  st_blocks;};

文件类型

(1)普通文件。这是最常用的文件这种文件包含了某种形式的数据。至于这种数据时文本还是二进制文件对于UNIX内核而言并无区别。

(2)目录文件。这种文件包含了其他文件的名字以及指向这些文件的指针。只有内核可以直接写文件。

(3)块特殊文件。这种文件类型提供对设备(例如磁盘)带缓冲的访问,每次访问以固定长度为单位进行。

(4)FIFO。这种类型文件用于进程间通信,也称为命名管道。

(5)字符特殊文件。这种文件提供不带缓冲的访问,每次访问的长度可变。系统中的所有设备要么是字符特殊设备要么是块特殊设备。

(6)套接字。这种文件类型用于进程间的网络通信。

(7)符号链接。这种文件指向另一个文件。

    文件的类型信息包含在stat结构的st_mode成员中。

         宏                       文件类型

        S_ISREG()          普通文件

        S_ISDIR()            目录文件

        S_ISCHR()           字符特殊文件

        S_ISBLK()            块特殊文件

        S_ISFIFO()           管道或FIFO文件

        S_ISLINK()           符号链接

        S_ISSOCK()         套接字

     早期的UNIX系统版本并不提供S_ISXXX宏,而是将st_mode与屏蔽字S_IFMT进行逻辑“与”运算,然后与名为S_IFXXX的常量比较。就像如下的情况:

#define S_ISXXX(mode) (((mode)&S_IFMT)==S_IFXXX)


0 0
原创粉丝点击