Linux 4 day 18号完结
1.文件操作函数 stat函数
(1).获取文件信息
代码读取
结构体信息
struct stat {
dev_t st_dev; //文件的设备编号
ino_t st_ino; //节点
mode_t st_mode; //文件的类型和存取的权限
nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1
uid_t st_uid; //用户ID
gid_t st_gid; //组ID
dev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号
off_t st_size; //文件字节数(文件大小)
blksize_t st_blksize; //块大小(文件系统的I/O 缓冲区大小)
blkcnt_t st_blocks; //块数
time_t st_atime; //最后一次访问时间
time_t st_mtime; //最后一次修改时间
time_t st_ctime; //最后一次改变时间(指属性)
};
结构体 mode_t内存粹着文件的类型和权限 以下我们将读取出来
(2).stat获取信息的第一个版本
st_mode->
void show(struct stat *s)
{
int a=4;
switch(s->st_mode & S_IFMT)//与运算的结果进行case
{
case S_IFREG:
printf("w %d",a);
break;
default:
break;
}
}
(2).stat获取文件信息的第2个版本
void show(struct stat *s)
{
if(S_ISREG(s->st_mode))
{
printf("ahah\n");
}
}
(3).获取文件的权限
void show(struct stat *s)
{
if(s->st_mode & S_IRUSR)
{
printf("R");
}else
{
printf("-");
}
if(s->st_mode & S_IWUSR)
{
printf("W");
}else
{
printf("-");
}
if(s->st_mode & S_IXUSR)
{
printf("X");
}else
{
printf("-");
}
}
2.其他的文件操作相关函数
1.access函数
2.chmod函数
3.chown函数
4. truncate函数
5.link函数
6.symlink函数
7.readlink函数
8. unlink函数
9. rename函数
3.文件描述符复制(重)
同一个文件描述符控制同一个文件
1.dup函数
2.dup2函数
函数注释:
我们用write来写入文件的时候 会改变文件编译量 而我们复制的文件描述符 都是共享的文件表 故此不会被覆盖输出
3.dup过程
4. fcnlt函数
fcntl函数有5种功能:
复制一个现有的描述符(cmd=F_DUPFD)
获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD)
获得/设置文件状态标记(cmd=F_GETFL或F_SETFL)
获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN)
获得/设置记录锁(cmd=F_GETLK, F_SETLK或F_SETLKW)
// 等价于dup() 复制文件符
int new_fd = fcntl(fd, F_DUPFD, 0);
// 获取文件状态标志
int flag = fcntl(fd, F_GETFL, 0);
switch (flag & O_ACCMODE)//获取权限
{
case O_RDONLY:
printf("read only\n");
break;
case O_WRONLY:
printf("write only\n");
break;
case O_RDWR:
printf("read and write\n");
break;
default:
break;
}
if (flag & O_APPEND)
{
printf("append\n");
}
flag |= O_APPEND; // 追加flag
fcntl(fd, F_SETFL, flag); //设置文件状态标记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步