Linux系统编程——目录操作函数
Linux系统编程——目录操作函数
opendir函数
DIR* opendir(const char* name);
所需头文件:dirent.h、 sys/types.h
功能:打开目录
name:目录名
返回值:成功返回目录指针,失败返回NULL并设置errno。
closedir函数
int closedir(DIR* dirp);
所需头文件:dirent.h、sys/types.h
功能:关闭目录
dirp:目录的指针
返回值:成功返回0,失败返回-1并设置errno。
readdir函数
struct dirent* readdir(DIR* dirp);
所需头文件:dirent.h
功能:读取目录下的文件
dirp:目录指针
返回值:成功返回dirent结构体指针,失败到了目录结尾返回NULL并设置errno。
dirent结构体
struct dirent {ino_t	d_ino; //该目录对应的文件/目录的inode编号off_t	d_off; //当前目录项在流中的偏移量unsigned short d_reclen; //当前目录项记录的长度(字节数)unsigned char d_type; //文件类型---但并不支持所有文件系统DT_BLK 块设备文件DT_CHR 字符设备文件DT_DIR 目录DT_FIFO 命名管道(FIFO)DT_LNK 符号链接DT_REG 普通文件DT_SOCK 套接字文件char d_name[256];  //文件名
};
示例:实现ls命令
代码:
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>int main(int argc, char** argv)
{DIR* dir;struct dirent* entry;int count;if (argc != 2) {fprintf(stderr, "Usage: %s <dirname>\n", argv[0]);return 1;}if (NULL == (dir = opendir(argv[1]))) {perror("opendir error");return 1;}while(NULL != (entry = readdir(dir))) {++count;printf("%s\t", entry->d_name);if(count % 10 == 0)printf("\n");}printf("\n");closedir(dir);return 0;
}执行结果:

