版权声明:本文为博主原创文章,转载时请标明来源。 https://blog.csdn.net/aiwangtingyun/article/details/86554596
目录的操作函数:具体功能请查看帮助手册 man 3 opendir
// 打开目录
DIR *opendir(const char *pathname) // 成功返回指针 失败返回NULL
// 遍历目录
struct dirent *readdir(DIR *dp) // 成功返回结指针,失败或到目录尾返回NULL
// 重置目录流指针位置
void rewinddir(DIR *dir)
// 关闭打开的目录流
int closedir(DIR *dir)
// 获取目录流当前位置
off_t telldir(DIR *dir)
// 偏移目录流指针位置
void seekdir(DIR *dir, off_t offset)
目录属性包含在结构体 struct dirent 中,查看 man 3 readdir
struct dirent {
ino_t d_ino; /* Inode 号 */
off_t d_off; /* 目录流当前的位置 */
unsigned short d_reclen; /* 当前record的长度 */
unsigned char d_type; /* 目录文件类型 */
char d_name[256]; /* 目录路径 */
};
结构体 struct dirent 与实现有,但最少会包含前两个成员
应用这两个函数打印当前所在的目录属性
#include <stdio.h>
#include <sys/types.h> // Linux系统下特有的
#include <dirent.h> // 操作文件目录的库
int main(int argc, char *argv[])
{
char *path = "./"; // 默认路径
DIR *pDir; // 目录流指针
// 打开目录
pDir = opendir(path);
if (NULL == pDir)
{
perror(path);
return -1;
}
// 遍历目录
struct dirent *pEnt;
while (1)
{
// 读取一条目录项
pEnt = readdir(pDir);
if( pEnt == NULL) break;
printf("ino:%ld name:%s\n", pEnt->d_ino, pEnt->d_name);
// 文件类型
switch (ent->d_type)
{
case DT_BLK : printf("block device.\n"); break;
case DT_CHR : printf("character device.\n"); break;
case DT_DIR : printf("directory.\n"); break;
case DT_FIFO: printf("named pipe (FIFO).\n"); break;
case DT_LNK : printf("symbolic link.\n"); break;
case DT_REG : printf("regular file.\n"); break;
case DT_SOCK: printf("UNIX domain socket.\n"); break;
case DT_UNKNOWN: printf("could not be determined.\n"); break;
}
}
// 用完记得关闭目录
closedir(pDir);
return 0;
}
更改目录操作
// 通过目录路径更改当前工作目录
int chdir(const char *path);
// 通过文件描述符更改当前工作目录
int fchdir(int fildes);
// 获取当前绝对工作路径保存在buf里
char *getcwd(char *buf, size_t size);