目录
C语言-目录操作
目录操作在嵌入式产品和应用式软件编程必不可少。
获取当前目录
Linux下直接输入pwd来获取当前工作目录,这个命令由系统通过shell程序解释执行。
模拟实现pwd,获取当前工作目录:
函数声明:
char *getcwd(char *buf, size_t size);
实现思路及原理:
getcwd函数把当前目录的名字写到给定的缓冲区buf里.
如果目录的名字超过了参数size给出的缓冲区长度,他就返回NULL;
否则返回指针buf,我们通过buf来获取当前的目录。
例如:
char strpwd[217];
memset(strpwd, 0, sizeof(strpwd));
getcwd(strpwd, 300);
printf("当前目录是:%s\n",strpwd);
切换目录
函数声明:
int chdir(const char *path);
shell里使用cd命令切换目录,程序里可以使用chdir系统调用实现目录切换。
返回值:0表示切换成功,非0失败。
目录的创建与删除
shell里运用mkdir和rmdir创建和删除一个目录。
创建目录函数声明:
int mkdir(const char *pathname, mode_t mode);
删除目录函数声明:
int rmdir(const char *pathname);
获取文件的目录列表
获取目录中的文件目录,类似于ls命令。
处理文件之前,必须先知道目录中有哪些文件,所以要获取目录中的文件。
1.包含头文件
#include<dirent.h>
2.库函数
打开目录opendir的函数声明:
DIR *opendir(const char *pathname);
读取目录readdir的函数声明:
struct dirent *readdir(DIR *dirp);
关闭目录closedir的函数声明:
int closedir(DIR *dirp);
3.数据结构
DIR是目录指针,就像文件操作时的文件指针。
调用一次readdir返回一个结构体指针,结构体里边放置目录信息与文件信息。
读取目录函数readdir,返回结构体指针,结构体如下:
struct dirent { long d_ino; //inode number 索引节点号 off_t d_off; //offset to this dirent 在目录文件中的偏移 unsigned short d_reclen; //length of this d_name 文件名长 unsigned char d_type; //the type of d_name 文件类型 char d_name[NAME_MAX+1]; //file name 文件名,最长255字符 };
d_type描述文件类型,多种取值,最重要的就是8-常规文件(A regular file),4-目录(A directory)。
谢谢阅读,敬请指正。