zoukankan      html  css  js  c++  java
  • 实现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!!!!
    ");
    
        
    
    
    
    
    
    
    
    }
  • 相关阅读:
    LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别
    Linq扩展方法之All 、Any
    Linq扩展方法之Aggregate 对序列应用累加器函数
    C#开发的进化史
    C#选择文件、选择文件夹、打开文件(或者文件夹)
    XPath操作XML文档
    文档对象模型操作xml文档
    XML简介
    php获取某经纬度附近地点位置
    Yii中实例化类的四种方式
  • 原文地址:https://www.cnblogs.com/wzben/p/5456969.html
Copyright © 2011-2022 走看看