1 函数stat,fstat,lstat,fstatat
#include<sys/stat.h>
int stat(const char* restrict pathname,struct stat *restrict buf);//1.pathname 文件路径 2.buf 一个文件类型的结构体指针
int fstat(int fd,struct stat *buf);//1.fd 已经打开的文件描述符 2.buf 与上述相同
int lstat(const char*restrict pathname,struct stat *restrict buf);//与 stat函数参数相同
int fstatat(int fd,const char* restrict pathname,struct stat *restrict buf,int flag);
1.stat函数 文件的类型赋值给buf
2.fstat与stat相同,但第一个参数不同,fstat的第一个参数为文件描述符
3.lstat与stat函数相同,但lstat如果遇到的文件的符号连接,他指向的是文件本身,而不是符号连接指向的文件
4.fstatat函数为一个相对于当前打开目录(由fd指出)的路径名返回文件统计信息。flag参数控制着是否跟随一个符号链接。当flag参数为AT_SYMLINK_NOFOLLOW标志被设置时,不会跟随符号链接,而是返回符号链接本身的信息。否则,返回的是符号链接指向的实际文件的信息。如果参数fd的值是AT_FDCWD, 并且pathname是一个相对路径名。则fstatat会计算相对于当前目录的pathname参数。如过pathname是个绝对路径,fd的参数就会被忽略.
下面是结构体 stat的定义
struct stat
{
mode_t st_mode;//文件类型
into_t st_ino;
dev_t st_dev;
dev_t st_rdev;
nlink_t st_nlink;//硬链接计数
uid_t st_uid;//文件所有者
gid_t st_gid;//文件组所有者
off_t st_size;
struct timespec st_atime;//文件数据最后的访问时间
struct timespec st_mtime;//文件数据最后的修改时间
struct timspec st_ctime;//i节点状态最后更改的时间
blksize_t st_blksize;//对文件IO 较合适的块长度
blkcnt_t st_blocks;//所分配的实际512字节块的块数 有的可能不是512字节,此值不使用移植
};
2.文件类型
文件类型信息包含在stat结构体的st_mode成员中.可以用下图中的宏确定文件类型,这些宏的参数都是stat结构体中的st_mode成员.
| 宏 | 文件类型 |
|---|---|
| S_ISREG() | 普通文件 |
| S_ISDIR() | 目录文件 |
| S_ISCHR() | 字符特殊文件 |
| S_ISBLK() | 块特殊文件 |
| S_ISFIFO() | 管道或FIFO |
| S_ISLNK() | 符号链接 |
| S_ISSOCK() | 套接字 |
下面的宏参数指向的是stat结构体
| 宏 | 对象的类型 |
|---|---|
| S_TYPEISMQ() | 消息队列 |
| S_TYPEISSEM() | 信号量 |
| S_TYPEISSHM() | 共享存储对象 |
3. 文件访问权限
文件访问权限值包含在了st_mode 这个里面

最低0.47元/天 解锁文章
3277

被折叠的 条评论
为什么被折叠?



