别怕Linux编程

目录操作引子-《别怕Linux编程》之六

目录操作是Linux环境编程中很重要的部分,因为几乎所有程序都离不开目录操作。但是你也不必害怕,因为目录操作也是相对简单的一部分。

先来看一个例子吧,作为引子。(更全面的目录操作讲解,待后续文章深入)

这个引子,你仔细看,其实很容易懂的,作用就是列出某个目录下的文件列表以及相应 i 节点号,并且当遇到子目录,在其后面标示“(DIR)”字样。

闲言少叙,看程序:

#include
#include
#include
#include
#include
#include

int main()
{
        DIR *dp;
        struct dirent *dirp;
        char dirname[]="/rocrocket/career/programming";
        if((dp=opendir(dirname))==NULL){
                perror("opendir error");
                exit(1);
        }
        while((dirp=readdir(dp))!=NULL){
                if((strcmp(dirp->d_name,".")==0)||(strcmp(dirp->d_name,"..")==0))
                        continue;
                printf("%6d:%-19s %5s\n",dirp->d_ino,dirp->d_name,(dirp->d_type==DT_DIR)?("(DIR)"):(""));
        }
        return 0;
}

程序运行结果如下:

[rocrocket@rocrocket programming]$ ./a.out 
744045:opendir.c                
744023:malloc_1.c               
744025:newline_1.c              
744027:sscanf_conf.c            
744026:socket_test         (DIR)
744040:straight_insert.c        
744020:abc                      
744036:const_1.c                

大大的opendir,readdir清晰可见,稍加思考,便会理解如何使用这些函数。值得注意的是DIR类型和struct dirent类型,你可以man 3 readdir和man 3 opendir来获得其相应讲解。本系列文章会在之后的文章中亦详细讲解这两个类型:)

PS:本程序没有经过严格的推敲,只是实现了基本功能,亦未包含特殊情况处理机制,所以说这是个引子程序^_^

over~

发表您的评论

请您放心,您的信息会被严格保密。必填项已标识 *