linux系统函数学习_(6)目录操作函数chdir函数与getcwd函数、mkdir函数与rmdir函数、opendir函数、readdir函数及closedir函数
2021/9/4 7:05:53
本文主要是介绍linux系统函数学习_(6)目录操作函数chdir函数与getcwd函数、mkdir函数与rmdir函数、opendir函数、readdir函数及closedir函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
linux系统函数学习_(6)目录操作函数chdir函数与getcwd函数、mkdir函数与rmdir函数、opendir函数、readdir函数及closedir函数
chdir()函数
修改当前进程的路径
int chdir(const char *path);
getcwd()函数
获取当前进程工作目录
char *getcwd(char *buf, size_t size);
chdir()函数与getcwd()函数结合在一起使用理解
示例
// chdir_getcwd.c #include <stdio.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char* argv[]) { if(argc < 2) { printf("a.out dir\n"); exit(1); } int ret = chdir(argv[1]); if(ret == -1) { perror("chdir"); exit(1); } int fd = open("chdir.txt", O_CREAT | O_RDWR, 0777); if(fd == -1) { perror("open"); exit(1); } close(fd); char buf[128]; getcwd(buf, sizeof(buf)); printf("current dir: %s\n", buf); return 0; }
mkdir()函数
创建目录 - -注意:创建的目录需要有执行权限,否则无法进入目录
int mkdir(const char *pathname, mode_t mode);
示例
// mkdir.c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> int main(int argc, char* argv[]) { if(argc < 3) { printf("a.out newDir mode\n"); exit(1); } int mode = strtol(argv[2], NULL, 8); int ret = mkdir(argv[1], mode); if(ret == -1) { perror("mkdir"); exit(1); } return 0; }
rmdir()函数
删除一个空目录
int rmdir(const char *pathname);
opendir()函数
打开一个目录
DIR *opendir(const char *name);
返回值:DIR结构指针,该结构是一个内部结构,保存所打开的目录信息,作用类似于FILE结构,函数出错返回NULL
readdir()函数
读取目录
struct dirent *readdir(DIR *dirp);
返回一条记录项:
struct dirent { ino_t d_ino; // 此目录进入点的inode off_t d_off; // 目录文件开头至此目录进入点的位移 unsigned short int d_reclen; // 文件的长度, 不包含NULL字符 unsigned char d_type; // 所指的文件类型 char d_name[256]; // 以NULL结尾的文件名 };
d_type: DT_BLK-块设备 DT_CHR-字符设备 DT_DIR-目录 DT_LNK-软连接 DT_FIFO-管道 DT_REG-普通文件 DT_SOCK-套接字 DT_UNKNOWN-未知
closedir()函数
关闭目录
int closedir(DIR *dirp);
示例
// opendir_readdir_closedir.c #include <string.h> #include <stdio.h> #include <stdlib.h> #include <dirent.h> int getFileNum(char* root) { // 打开目录 DIR* dir = opendir(root); if(dir == NULL) { perror("opendir"); exit(0); } // 读目录 int total = 0; char path[1024] = {0}; struct dirent* ptr = NULL; while((ptr = readdir(dir)) != NULL) { // 跳过 . 和 .. if(strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0) { continue; } // 判断是不是文件 if(ptr->d_type == DT_REG) { total ++; } // 如果是目录 if(ptr->d_type == DT_DIR) { // 递归读目录 sprintf(path, "%s/%s", root, ptr->d_name); total += getFileNum(path); } } closedir(dir); return total; } int main(int argc, char* argv[]) { // 读目录, 统计文件个数 int total = getFileNum(argv[1]); // 打印 printf("%s has file number: %d\n", argv[1], total); return 0; }
参考
参考黑马程序员linux系统编程资料
这篇关于linux系统函数学习_(6)目录操作函数chdir函数与getcwd函数、mkdir函数与rmdir函数、opendir函数、readdir函数及closedir函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法