9.4 Linux_I/O_访问目录、文件属性

news/2024/9/28 21:19:21/

访问目录

1、打开关闭目录

打开目录函数声明如下:

//1.直接打开指定路径的目录文件
DIR *opendir(const char *name);
//2.先用open打开目录文件,再用该函数访问目录文件
DIR *fdopendir(int fd);

返回值:成功返回指向打开的目录文件的结构体指针(流指针),失败返回NULL

name:目录的路径

fd:文件描述符

关闭目录函数声明如下:

int closedir(DIR *dirp);

返回值:成功返回0,失败返回EOF

dirp:指向目录的流指针

2、读目录

函数声明如下:

struct dirent *readdir(DIR *dirp);

返回值:失败或读到末尾返回NULL,成功可以通过结构体读取目录内容,类似 ls-a 效果

dirp:指向目录的流指针

实现 ls -a 效果代码:

具体代码实现如下:

#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <errno.h>int main(){DIR* dp = NULL;struct dirent* dt = NULL;//1.打开目录if((dp = opendir("../linux_test")) == NULL){perror("opendir");return -1;}//2.获取并打印目录中的文件名while(1){dt = readdir(dp);//读取目录信息if(dt == NULL){break;}else{printf("%s ",dt->d_name);//dt的d_name代表文件名,依次读取即可}}puts("");//3.关闭目录closedir(dp);return 0;
}

代码执行结果如下:

文件属性

1、修改文件权限

函数声明如下:

//直接通过文件路径,修改指定文件的权限
int chmod(const char *pathname, mode_t mode);//先通过open打开文件,再通过fd修改指定文件权限
int fchmod(int fd, mode_t mode);

返回值:成功返回0,失败返回EOF

pathname:文件的路径

fd:文件描述符

mode:权限,与命令chmod的使用方式完全一致。

示例代码如下:

具体代码实现如下:

#include <stdio.h>
#include <errno.h>
#include <sys/stat.h>int main(){if(chmod("./file",0444) == EOF){perror("chmod");return -1;}return 0;
}

代码执行结果如下:

2、获取文件的属性

函数声明如下:

//当为链接文件时,获取目标的文件属性
int stat(const char *pathname, struct stat *statbuf);
//需要先用open打开文件,再调用该函数,作用与stat一样
int fstat(int fd, struct stat *statbuf);//当为链接文件时,获取链接文件自身的文件属性
int lstat(const char *pathname, struct stat *statbuf);

返回值:成功返回0,失败返回EOF

pathname:文件的路径

fd:文件描述符

statbuf:存放文件属性的结构体

struct stat 结构体中所关注的成员如下:

struct stat {mode_t st_mode;   //文件的类型和存储的权限uid_t  st_uid;    //用户IDgid_t  st_gid;    //组IDoff_t  st_size;   //文件的大小       time_t st_atime;  //最后一次访问的时间time_t st_mtime;  //最后一次修改的时间time_t st_ctime;  //最后一次改变属性的时间.....             //其他的一些成员
}

文件类型相关宏如下:

使用方法为,将struct stat结构体的成员st_mode传入宏,如果是相应的文件类型则返回1

S_ISREG(st_mode)    //是否为常规文件
S_ISDIR(st_mode)    //是否为目录文件
S_ISCHR(st_mode)    //是否为字符文件
S_ISBLK(st_mode)    //是否为块文件
S_ISFIFO(st_mode)   //是否为管道文件
S_ISLNK(st_mode)    //是否为链接文件
S_ISSOCK(st_mode)   //是否为套接字文件

文件权限获取方式如下:

struct stat结构体的成员st_mode的低9位代表文件的权限,bit8~bit0分别表示用户、用户组、其他用户的rwx权限,当位的值为1时,代表有权限,具体含义如下:

使用 stat 实现 ls -l 功能:

具体代码实现如下:

#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
int main(){struct stat buf;int i;struct tm* tTime = NULL;//1.stat获取文件属性if(stat("./file",&buf) == EOF){perror("stat");return -1;}//2.访问文件属性//2.1 打印文件大小printf("file size = %ld\n",buf.st_size);//2.2 打印文件类型if(S_ISREG(buf.st_mode)){ 				printf("this is regular file\n");}//2.3 打印文件权限printf("文件的权限为:");for(i=8;i>=0;i--){if(buf.st_mode & (0x01<<i)){switch(i%3){case 0:printf("x");break;case 1:printf("w");break;case 2:printf("r");break;}}else{printf("-");}}puts("");//2.4 打印文件时间tTime = localtime(&buf.st_atime);printf("文件的最后一次访问时间为:%d年%02d月%02d日,星期%d,%02d:%02d:%02d\n",\tTime->tm_year + 1900, \tTime->tm_mon + 1, \tTime->tm_mday, \tTime->tm_wday, \tTime->tm_hour, \tTime->tm_min, \tTime->tm_sec \);return 0;
}

代码运行结果如下:


http://www.ppmy.cn/news/1530706.html

相关文章

通信工程学习:什么是NFVO网络功能虚拟化编排器

NFVO&#xff1a;网络功能虚拟化编排器 NFVO&#xff08;Network Functions Virtualization Orchestrator&#xff09;&#xff0c;即网络功能虚拟化编排器&#xff0c;是网络功能虚拟化&#xff08;NFV&#xff09;架构中的核心组件之一。NFV是一种将传统电信网络中的网络节点…

Chainlit集成LlamaIndex实现知识库高级检索(BM25全文检索器)

检索原理 BM25Retriever类是一个基于BM25算法设计的检索器&#xff0c;它主要用于从一组文档或节点中检索出与查询最相关的文档或节点。这个类的设计目的是为了提高文本检索的效率和准确性&#xff0c;尤其是在处理大量文本数据时。 BM25&#xff08;Best Matching 25&#x…

Ubuntu环境切换到服务器某个用户后source等命令和Tab快捷补全都用不了了,提示没找到,但root用户可以

以escs用户为例&#xff1a; 输入以下命令 grep root /etc/passwd grep escs /etc/passwd 对比发现&#xff0c;root用户配的是bash&#xff0c;而escs却是sh&#xff0c; 所以把escs的sh改成和root一样的bash&#xff0c;命令为 usermod -s /bin/bash escs 改好后就可以了。 …

centos磁盘逻辑卷LVM创建

centos磁盘逻辑卷LVM创建 一、磁盘逻辑卷LVM说明二、centos磁盘使用情况三、LVM安装指南1.LVM工具安装1. yum list lvm2. yum search lvm3. yum search pvcreate4. yum list lvm25. yum install lvm2 2.创建物理卷2.1磁盘情况查看2.2创建物理卷&#xff08;PV&#xff09; 3.创…

AntFlow-Vue3 :一个仿钉钉流程审批,且满足99.8%以上审批流程需求的企业级工作流平台,开源且免费!

在现代企业管理中&#xff0c;流程审批的高效性直接影响到工作的流畅度与生产力。最近&#xff0c;我发现了一个非常有趣的项目—— AntFlow-Vue3 。这个项目不仅提供了一个灵活且可定制的工作流平台&#xff0c;还能让用户以可视化的方式创建和管理审批流程。 如果你是一名前…

Biomaterials近期论文及下载链接

近期论文1 https://authors.elsevier.com/a/1jjMvWWN0%7EIuI 近期论文2 https://authors.elsevier.com/a/1jjQ9WWN0%7EIxK 近期论文3 https://authors.elsevier.com/a/1jjGaWWN0%7EIs9 近期论文4 https://authors.elsevier.com/a/1jir1WWN0%7EIyN 近期论文5 https://authors.el…

Vue 3 表格时间监控与动态后端请求触发详解(附Demo)

目录 1. 基本知识2. Demo 1. 基本知识 这一类的时间点是因数据而异&#xff0c;所以定时任务不适用&#xff0c;需要前端表格自身数据到达之后去触发 往下的数据多数结合自身实战代码的一个总结 表格数据渲染 在 Vue 3 中使用 el-table 组件来展示表格数据&#xff0c;表格…

谷歌 Chrome 最新版升级:更强的安全检查功能守护你的上网安全

谷歌 Chrome 浏览器产品经理 Andrew Kamau 在最新发布的博文中宣布&#xff0c;Chrome 浏览器迎来了新一轮的安全升级。新版 Chrome 在后台自动运行安全检查功能&#xff0c;采取了额外的主动措施来保障用户的安全。 自动撤销通知权限 新版 Chrome 浏览器采用了一项基于谷歌安…