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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值