您的位置:首页 > 编程语言

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

2014-08-05 20:37 253 查看

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: