• 实现ls -l


    就是遍历一个目录下面的所有文件,显示信息

    Linux下面有点绕

    要通过 opendir打开目录,返回一个DIR结构

    用readdir来读DIR结构,返回目录下面的第一项,是个dirent结构体,再次调用readdir回读到第二项,以此类推

    dirent结构体里面有该文件的文件名,通过stat可以获得该文件的详细信息。

    注意stat结构要malloc一下,不然后segment fail??好像是这个单词。可能是没有分配的话指针会乱指。

    读写执行权限在mode_t里面,没有直接输出的函数,要自己写一个,判断有没有该权限,用与运算,不是判等。

    其它信息都在stat里面,这里只输出了st_mode。

    #include<dirent.h>
    #include<stdio.h>
    #include<sys/stat.h>
    #include <fcntl.h>
    
    void show(mode_t mode){
    
        if(mode&S_IRUSR)
            printf("r");
        else
            printf("-");
    
        if(mode&S_IWUSR)
            printf("w");
        else
            printf("-");
    
        if(mode&S_IXUSR)
            printf("x");
        else
            printf("-");
    
    
        /*********Group********/
    
    
        if(mode&S_IRGRP)
            printf("r");
        else
            printf("-");
    
        if(mode&S_IWGRP)
            printf("w");
        else
            printf("-");
    
        if(mode&S_IXGRP)
            printf("x");
        else
            printf("-");
    
        /**********Else***************/
    
        if(mode&S_IROTH)
            printf("r");
        else
            printf("-");
    
        if(mode&S_IWOTH)
            printf("w");
        else
            printf("-");
    
        if(mode&S_IXOTH)
            printf("x");
        else
            printf("-");
    
    
    
        printf("
    ");
    
    
    }
    
    
    int main(int argc,char * argv[]){
    
    
        DIR *dp;
        struct dirent* dir;
        struct stat * buf = (struct stat *)malloc(sizeof(struct stat));
        int fd;
    
        dp = opendir(argv[1]);
    
        while((dir = readdir(dp))!=NULL){
    
            printf("%s    ",dir->d_name);
            //fd = open(dir->d_name,O_RDWR);
            //fstat(fd,buf);
            stat(dir->d_name,buf);
            show(buf->st_mode);
    
        }
    
        printf("Done!!!!
    ");
    
        
    
    
    
    
    
    
    
    }
  • 相关阅读:
    socket based————转帖
    罗马假日 java程序员
    java六大必须理解的问题来自网络少许有误 java程序员
    spring的scope="prototype" java程序员
    @GeneratedValue java程序员
    myeclipse乱码和tomcat相关的 java程序员
    关于***.hbm.xml的说明 java程序员
    hibernate中的Annotation补充 java程序员
    爱的随笔C语言版 java程序员
    Hibernate对jpa annotation的支持 java程序员
  • 原文地址:https://www.cnblogs.com/wzben/p/5456969.html
Copyright © 2020-2023  润新知