Loading

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 @ 2020-11-22 21:21  IamHzc  阅读(1190)  评论(0编辑  收藏  举报