UNIX/Linux文件和目录操作(一)

本文详细介绍了UNIX/Linux系统中关于文件和目录的操作,包括stat、fstat、lstat等函数获取文件属性,access函数测试文件访问权限,umask设置权限屏蔽码,以及chmod/fchmod修改文件权限。此外,还探讨了truncate/ftruncate调整文件大小,link/unlink创建和删除硬链接,以及rename函数的文件重命名。同时讲解了软链接的创建和读取,并涵盖了mkdir/rmdir的目录操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

之前我们说明了执行I/O操作的基本函数,其中讨论的是围绕普通文件I/O进行的——打开文件、读文件和写文件。
本次将描述文件系统的其他特征和文件的性质。
我们将从stat函数开始,逐个说明stat结构的每一个成员以了解文件的所有属性。在此过程中将说明修改这些属性的各个函数,还更详细的说明UNIX文件系统的结构以及符号链接,最后介绍对目录操作的各个函数。

1、函数stat、fstat、lstat

头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int stat(const char *path, struct stat *buf);
int fstat(int fd, struct stat *buf);
 int lstat(const char *path, struct stat *buf);

他们的功能都是用来获取文件属性,成功返回0,失败返回-1。
当以降序遍历目录层次结构时,需要用到lstat

参数:

path:文件路径
fd:需要打开后的文件描述符
buf:是一个指针,它指向一个结构体,其基本形式为:
struct stat {
   
   

               dev_t     st_dev;     /* ID of device containing file */           设备ID
               ino_t     st_ino;     /* inode number */                           节点号
               mode_t    st_mode;    /* protection */                             文件类型和权限
               nlink_t   st_nlink;   /* number of hard links */                   硬链接数
               uid_t     st_uid;     /* user ID of owner */                       用户ID
               gid_t     st_gid;     /* group ID of owner */                      组ID
               dev_t     st_rdev;    /* device ID (if special file) */            特殊设备ID
               off_t     st_size;    /* total size, in bytes */                   文件的总字节数
               blksize_t st_blksize; /* blocksize for file system I/O */          I/O块数
               blkcnt_t  st_blocks;  /* number of 512B blocks allocated */        占用块(512字节)数
               time_t    st_atime;   /* time of last access */                    最后访问时间
               time_t    st_mtime;   /* time of last modification */              最后修改时间
               time_t    st_ctime;   /* time of last status change */             最后文件属性修改时间

           };

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

文件类型
IS_IFMT() 获取文件类型出错
S_ISREG() 普通文件
S_ISDIR() 目录文件
S_ISCHR() 字符特殊文件
S_ISBLK() 块特殊文件
S_ISFIFO() 管道或FIFO
S_ISLNK() 符号链接
S_ISSOCK() 套接字
S_ISVTX() 文件沾粘位
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值