Linux opendir();readdir();chdir()使用要点

1、头文件#

#include <sys/types.h>
#include <dirent.h>

2、opendir#

opendir函数的作用是打开一个目录并建立一个目录流

DIR *opendir(const char *name);  //参数name 文件夹的名字

如果打开成功的话返回一个DIR结构的指针,该指针用于读取目录数据项。
如果失败的话返回一个空指针
如果文件中的文件过多也可能打开失败

3、readdir#

struct dirent *readdir(DIR *dirp)

函数成功的话返回一个指针,该指针的结构里保存着目录流中下一个目录项的资料,如果错误或者到达目录尾,返回NULL,但不改变error的值,只有发生错误的时候才会设置error;
注意如果readdir函数扫描目录的同时还有其他的进程在该目录里创建或者删除文件,readdir将不能保证能够列出目录里的所有文件和子目录。
struct dirent 结构体中有两个元素

ino_t d_ino: The inode of the file//文件的inode节点
char d_name[]: The name of the file//文件名

4、chdir#

int chdir(const char *path );
说明:chdir函数用于改变当前工作目录。调用参数是指向目录的指针,调用进程需要有搜索整个目录的权限。每个进程都具有一个当前工作目录。在解析相对目录引用时,该目录是搜索路径的开始之处。如果调用进程更改了目录,则它只对该进程有效,而不能影响调用它的那个进程。在退出程序时,shell还会返回开始时的那个工作目录。
(1) 内核解析参数中的路径名,并确保这个路径名有效。为了做到这一点,就路径名解析而言,内核使用相同的算法。如果路径名无效,它输出错误消息并退出。
(2) 如果路径名有效,内核定位该目录的索引节点,并检查它的文件类型和权限位,确保目标文件是目录以及进程的所有者可以访问该目录(否则改变到新目录就没有用)。
(3) 内核用新目标目录的路径名和/或索引节点替换u区中当前目录路径名和/或它的索引节点号。

错误信息:

EFAULT: path 指向了非法地址

ENAMETOOLNG:路径过长

ENOENT:文件不存在

ENOMEM:内核内存不足

ENOTDIR:给出路径不是目录

EACCES:无访问路径中某个目录的权限

ELOOP:解析路径中太多的符号链接

EIO:发生I/O错误
posted @   IamHzc  阅读(1230)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示
主题色彩