在本系列的前面章节中,主要讲解了C语言的基本语法和标准库功能,这是适用于C平台的基础知识。
不过对于Linux平台,还提供了一系列专属的GNU C库函数和接口,包括但不限于文件目录操作、系统管理接口、进程操作接口、多线程管理接口、环境变量管理、串口操作接口、进程间通信接口、网络编程接口等。
这些GNU C接口同样是嵌入式Linux应用开发的重要基础,本节也将从文件目录操作开始,逐步开始介绍这部分内容,算是对于C语法的补充扩展。
注意: 关于Linux C部分的接口和应用,仅在Linux平台测试,windows平台需要Cygwin环境才能运行。
文件目录操作接口
对于文件目录操作接口,定义在头文件<dirent.h>和<unistd.h>中。
主要包含的接口如下所示。
关于上述接口,详细描述如下所示。
// 获取目录的管理指针// @__name: 目录访问路径// @return: 管理目录的资源DIR *opendir(constchar *__name);// 读取目录的具体信息// @__dirp: 已经请求的目录指针// @return: 目录的具体信息指针struct dirent *readdir(DIR *__dirp);// 关闭获得的目录指针// @__dirp: 已经请求的目录指针// @return: 0表示关闭成功,负值返回对应错误码intclosedir(DIR *__dirp);// 创建目录// @__path: 目录访问路径// @__mode: 创建目录的权限, 可以是0644,0777// @return: 0表示创建成功,负值返回对应错误码intmkdir(constchar *__path, __mode_t __mode);// 删除目录// @pathname: 指向要删除的目录的路径名的指针// @return: 0表示删除成功,负值返回对应错误码intrmdir(constchar *pathname);// 改变当前进程工作目录// @pathname: 指向要更改当前目录的路径名的指针// @return: 0表示改变成功,负值返回对应错误码intchdir(constchar *pathname);// 获取当前工作目录// @buf: 存储当前工作目录路径的缓冲区// @size: 缓冲区大小// @return: 返回当前所在的工作目录,buf为NULL时指向新分配的地址,用户需要自己释放char *getcwd(char *buf, size_t size);
可以看到,这些接口和Linux C端的一些命令如mkdir、rmdir、chdir等命令的功能是对应的,其实这些命令正是由这些接口实现的。学习Linux C相关接口,也可以进一步巩固对于Linux C命令的理解和应用。
文件目录应用
文件目录的应用主要包含创建目录、
#include<stdio.h>#include<dirent.h>#include<unistd.h>#include<sys/stat.h>intmain(int argc, char *argv[]){ DIR *dir;structdirent *ent;char cwd[1024];// 获取当前工作目录if (getcwd(cwd, sizeof(cwd)) == NULL) { perror("getcwd");return1; }printf("current dir: %s\n", cwd);// 在当前工作目录下创建目录constchar *dir_path = "./test";structstatst;int ret = stat(dir_path, &st);if (ret == -1) {if (mkdir(dir_path, 0755) == -1) { perror("mkdir");return1; } }// 打印当前工作目录下的所有文件 dir = opendir(cwd);if (dir == NULL) { perror("opendir");return1; }while ((ent = readdir(dir)) != NULL) {printf("%s\n", ent->d_name); } closedir(dir);// 删除目录 rmdir(dir_path);// 切换到上一级目录if (chdir("../") == -1) { perror("chdir");return1; }if (getcwd(cwd, sizeof(cwd)) == NULL) { perror("getcwd");return1; }printf("current dir: %s\n", cwd);return0;}
对于上述代码,具体执行结果如下所示。

总结
Linux C目录处理标准库,提供了用户获取当前工作目录、创建目录、删除目录、切换到上一级目录等功能。
Linux C应用中,可以方便的管理文件目录相关的操作,如创建日志、配置、升级等文件存储的目录,或者在需要时直接删除目录,是Linux应用开发必不可少的一部分,需要花时间了解掌握。