本文转自:http://edsionte.com/techblog/archives/3462
Linux系统下有一系列对目录操作的API,如果单一的去学习这些API那么学习过程无疑是单调的。本文以实现Linux下ls命令为例,简单说明与目录操作相关的API。
1.获取文件名获取一个指定目录下的文件名列表是ls命令最基本的功能。对于一个普通文件而言,读文件中数据的步骤是:open()文件,read()文件,close()文件。对于目录文件而言,它包含的内容就是若干个目录项,一个目录项即对应该目录下的一个文件。因此读目录的过程与普通文件类似,不过Linux下的目录是一种特殊的文件,因此有一组针对目录操作的API,具体如下:
int get_file_name(char *path)
{
DIR *mydir;
struct dirent *myentry;
if ((mydir = opendir(dirpath)) == NULL) {
do_error();
}
while ((myentry = readdir(mydir)) != NULL) {
printf("%s\t", myentry->d_name);
strcat(tmpbuf, dirpath);
strcat(tmpbuf, myentry->d_name);
struct stat myfstat;
if (stat(tmpbuf, &myfstat) == -1) {
do_error();
}
print_file_stat(myfstat);
if (chdir(tmpbuf) == -1) {
print_no_chdir();
} else {
print_chdir();
}
printf("\n");
memset(tmpbuf, len);
}
closedir(mydir);
return 0;
}
如果切换成功,通过print_no_chdir()打印可切换标志,否则打印不可切换标志。上述的ls实现方式只是基本模型,感兴趣的童鞋可以在此基础上加以改进。