Linux 系统下文件信息的查询

本文介绍了一个自定义的Linux命令行工具ls的实现方法,该工具可以根据不同的参数选项显示目录内容及其属性,包括列出非隐藏文件、所有文件、详细属性等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/***************************/
程序功能:Linux系统下文件信息的获取———————LS
姓名:王恩博
日期:2015.6.1
使用方法简述:对控制台下输入不同的命令行参数的个数以及内容让程序做出不同的处理方式
   ./ls 直接读取出当前根目录内非隐藏文件的名称
   ./ls -a读取出当前根目录下所有文件的名称
   ./ls -l 读取出当前根目录内非隐藏文件的名称以及属性
   ./ls -al 读取出当前根目录内所有文件的名称以及属性
   
   ./ls /root/**/ 读取指定目录下非隐藏文件的名称
   ./ls -a /root/**/ 读取指定目录下所有文件的名称
   ./ls -l /root/**/ 读取指定目录下非隐藏文件的名称以及属性
   ./ls -al /root/**/读取指定目录下所有文件的名称以及属性
/******************************/

#include<sys/types.h>
#include<dirent.h>
#include<stdio.h>
#include<sys/stat.h>
#include<unistd.h>
#include<string.h>
#include<time.h>
int main(int argc,char **argv)
{
    DIR* ptr=NULL;
    char time[40]={'\0'};
    int i=0;
    struct dirent* dir=NULL;
    struct stat st;
    char dir_name[40]={'\0'};
    /**************************************/
        //./ls
    if(argc==1&&strcmp(argv[0],"./ls")==0)
    {
        ptr=opendir("./");
        while((dir=readdir(ptr))!=NULL)
        {
            strcpy(dir_name,dir->d_name);
            if(dir_name[0]!='.')
                printf("%s  \n",dir->d_name);
            memset(dir_name,0,40);
        }
        closedir(ptr);
    }
    /***************************************/
        //./ls -a
    if(argc==2&&strcmp(argv[0],"./ls")==0&&strcmp(argv[1],"-a")==0)
        {
                ptr=opendir("./");
                while((dir=readdir(ptr))!=NULL)
                {
                        strcpy(dir_name,dir->d_name);
                                printf("%s  \n",dir->d_name);
                }
                closedir(ptr);
        }
    /**************************************/
        //./ls -al
    else if(argc==2&&strcmp(argv[0],"./ls")==0&&strcmp(argv[1],"-al")==0)
    {
        ptr=opendir("./");
        while((dir=readdir(ptr))!=NULL)
        {
            stat(dir->d_name,&st);
                if(S_ISREG(st.st_mode))
                    printf("-");
                else if(S_ISDIR(st.st_mode))
                    printf("d");
                else 
                    printf("o");

                if(st.st_mode&S_IRUSR)
                    printf("r");
                else 
                    printf("-");
                if(st.st_mode&S_IWUSR)
                    printf("w");
                else 
                    printf("-");
                if(st.st_mode&S_IXUSR)
                    printf("x");
                else 
                    printf("-");

                if(st.st_mode&S_IRGRP)
                    printf("r");
                else 
                    printf("-");
                if(st.st_mode&S_IWGRP)
                    printf("w");
                else 
                    printf("-");
                if(st.st_mode&S_IXGRP)
                    printf("x");
                else 
                    printf("-");

                if(st.st_mode&S_IROTH)
                    printf("r");
                else 
                    printf("-");
                if(st.st_mode&S_IWOTH)
                    printf("w");
                else
                    printf("-");
                if(st.st_mode&S_IXOTH)
                    printf("x  ");
                else
                    printf("-  ");
                strcpy(time,ctime(&st.st_mtime));
                while(time[i]!='\n')
                {
                    printf("%c",time[i]);
                    i++;
                }
                printf("  %s\n",dir->d_name);
                i=0;
        }
        closedir(ptr);
    }
    /**************************************/
        //./ls -l
    else if(argc==2&&strcmp(argv[0],"./ls")==0&&strcmp(argv[1],"-l")==0)
        {
            ptr=opendir("./");
            while((dir=readdir(ptr))!=NULL)
            {
                strcpy(dir_name,dir->d_name);
                if(dir_name[0]!='.')
                {
                    stat(dir->d_name,&st);
                    if(S_ISREG(st.st_mode))
                    {
                        printf("-");
                    }
                    else if(S_ISDIR(st.st_mode))
                    {
                        printf("d");
                    }
                    else 
                        printf("0");

                    if(st.st_mode&S_IRUSR)
                                        printf("r");
                                    else
                                            printf("-");
                                    if(st.st_mode&S_IWUSR)
                                            printf("w");
                                    else
                                        printf("-");
                                    if(st.st_mode&S_IXUSR)
                                            printf("x");
                                    else
                                            printf("-");

                                    if(st.st_mode&S_IRGRP)
                                            printf("r");
                                    else
                                            printf("-");
                                    if(st.st_mode&S_IWGRP)
                                            printf("w");
                                    else
                                            printf("-");
                                    if(st.st_mode&S_IXGRP)
                                            printf("x");
                                    else
                                            printf("-");

                                    if(st.st_mode&S_IROTH)
                                            printf("r");
                                    else
                                            printf("-");
                                    if(st.st_mode&S_IWOTH)
                                            printf("w");
                                    else
                                            printf("-");
                                    if(st.st_mode&S_IXOTH)
                                            printf("x  ");
                    else 
                        printf("-  ");
                    strcpy(time,ctime(&st.st_mtime));
                    while(time[i]!='\n')
                    {   
                        printf("%c",time[i]);
                        i++;
                    }
                    printf("  %s\n",dir->d_name);
                }
                i=0;
                memset(dir_name,0,40);
            }
            closedir(ptr);
        }
    /***************************************/
        //./ls  /root/****/
    else if(argc==2&&strcmp(argv[0],"./ls")==0)
        {
            ptr=opendir(argv[1]);
            while((dir=readdir(ptr))!=NULL)
            {
                strcpy(dir_name,dir->d_name);
                if(dir_name[0]!='.')
                    printf("%s\n",dir->d_name);
            }
        }       
    /******************************************/
        //./ls -l /root/***/
    else if(argc==3&&strcmp(argv[0],"./ls")==0&&strcmp(argv[1],"-l")==0)
        {
            ptr=opendir(argv[2]);
            while((dir=readdir(ptr))!=NULL)
            {
                strcpy(dir_name,dir->d_name);
                if(dir_name[0]!='.')
                {
                    memset(dir_name,0,40);
                    strcpy(dir_name,argv[2]);
                    strcat(dir_name,dir->d_name);
                    stat(dir_name,&st);
                    if(S_ISREG(st.st_mode))
                        printf("-");
                    else if(S_ISDIR(st.st_mode))
                        printf("d");
                    else 
                        printf("o");

                    if(st.st_mode&S_IRUSR)
                                            printf("r");
                                    else
                                            printf("-");
                                    if(st.st_mode&S_IWUSR)
                                            printf("w");
                                    else
                                            printf("-");
                                    if(st.st_mode&S_IXUSR)
                                            printf("x");
                                    else
                                            printf("-");

                                    if(st.st_mode&S_IRGRP)
                                            printf("r");
                                    else
                                            printf("-");
                                    if(st.st_mode&S_IWGRP)
                                            printf("w");
                                    else
                                            printf("-");
                                    if(st.st_mode&S_IXGRP)
                                            printf("x");
                                    else
                                            printf("-");

                                    if(st.st_mode&S_IROTH)
                                            printf("r");
                                    else
                                            printf("-");
                                    if(st.st_mode&S_IWOTH)
                                            printf("w");
                                    else
                                            printf("-");
                                    if(st.st_mode&S_IXOTH)
                                            printf("x  ");
                    else 
                        printf("-  ");

                    strcpy(time,ctime(&st.st_mtime));
                    while(time[i]!='\n')
                    {
                        printf("%c",time[i]);
                        i++;
                    }
                    printf("%  s\n",dir->d_name);
                }
                i=0;
                memset(dir_name,0,40);
            }
        }
    /************************************************/
        //./ls -a /root/*****/
    else if(argc==3&&strcmp(argv[1],"-a")==0)
        {
            ptr=opendir(argv[2]);
            while((dir=readdir(ptr))!=NULL)
            {
                printf("%s\n",dir->d_name);
            }
        }
    /**********************************************/
        //./ls -al /root/*****/
    else if(argc==3&&strcmp(argv[1],"-al")==0)
        {
            ptr=opendir(argv[2]);
            while((dir=readdir(ptr))!=NULL)
            {
                strcpy(dir_name,argv[2]);
                strcat(dir_name,dir->d_name);
                stat(dir_name,&st);
                if(S_ISREG(st.st_mode))
                    printf("-");
                else if(S_ISDIR(st.st_mode))
                    printf("d");
                else 
                    printf("o");

                if(st.st_mode&S_IRUSR)
                                        printf("r");
                                else
                                        printf("-");
                                if(st.st_mode&S_IWUSR)
                                        printf("w");
                                else
                                        printf("-");
                                if(st.st_mode&S_IXUSR)
                                        printf("x");
                                else
                                        printf("-");

                                if(st.st_mode&S_IRGRP)
                                        printf("r");
                                else
                                        printf("-");
                                if(st.st_mode&S_IWGRP)
                                        printf("w");
                                else
                                        printf("-");
                                if(st.st_mode&S_IXGRP)
                                        printf("x");
                                else
                                        printf("-");

                                if(st.st_mode&S_IROTH)
                                        printf("r");
                                else
                                        printf("-");
                                if(st.st_mode&S_IWOTH)
                                        printf("w");
                                else
                                        printf("-");
                                if(st.st_mode&S_IXOTH)
                                        printf("x  ");
                else 
                    printf("-  ");

                strcpy(time,ctime(&st.st_mtime));
                while(time[i]!='\n')
                {
                    printf("%c",time[i]);
                    i++;
                }
                printf("%  s\n",dir->d_name);
                i=0;
                memset(dir_name,0,40);
            }
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值