码迷,mamicode.com
首页 > 其他好文 > 详细

实现ls -l

时间:2016-05-04 01:04:27      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:

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

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("\n");


}


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!!!!\n");

    







}

 

实现ls -l

标签:

原文地址:http://www.cnblogs.com/wzben/p/5456969.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!