目录操作API应用之ls命令的实现

本文转自: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实现方式只是基本模型,感兴趣的童鞋可以在此基础上加以改进。