入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

模拟ls -l命令简易代码demo

创建时间:2017-03-12 投稿人: 浏览次数:436

话不多说 上代码:

/*************************************************************************
	> File Name: ls-l.c
	> Author: 
	> Mail: 
	> Created Time: Wed 08 Mar 2017 05:32:08 AM PST
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<dirent.h>
#include<pwd.h>
#include<grp.h>
#include<string.h>
#include<time.h>
#include<sys/stat.h>
// a a/b a/c cur:a
// ls a:b,c
// ls b:XXX
// ls a/b:d
// cd a; ls b:d
void printtype(int mode)
{
    if(S_ISREG(mode)) putchar("-");
    else if(S_ISDIR(mode)) putchar("d");
    else if(S_ISLNK(mode)) putchar("l");
    else if(S_ISFIFO(mode)) putchar("p");
    else if(S_ISSOCK(mode)) putchar("s");
    else if(S_ISCHR(mode)) putchar("c");
    else if(S_ISBLK(mode)) putchar("b");
    else  putchar("@");
}
void printaccess(int mode)
{//rwxrwxrwx
 const char* acc ="rwx";
 int i;
 for(i = 0;i<9;i++,mode<<=1)//mode = mode<<1
     putchar(mode&0400?acc[i%3]:"-");
}
void showdetail(const char* name)
{
    struct stat s;
    lstat(name,&s);
    printtype(s.st_mode);//打印类型
    printaccess(s.st_mode&0777);//打印权限
    printf("%2d",s.st_nlink);
    printf("%7s",getpwuid(s.st_uid)->pw_name);
    printf("%7s",getgrgid(s.st_gid)->gr_name);
    printf("%5lu",s.st_size);
    char buff[20];
    strftime(buff,sizeof(buff),"%F %T",localtime(&s.st_mtime));
    printf("%20s %s
",buff,name);
}
void listDetial(void)
{
    DIR* p =opendir(".");//已经设为当前目录,打开即可
    if(NULL==p)
    {
        perror("opendir");
        return;
    }
    struct dirent* q=NULL;
    while((q=readdir(p))!=NULL)
    {
       if(q->d_name[0]==".") continue;
            //列出详细信息
            showdetail(q->d_name);
    }
}
int main(int argc,char* argv[])
{
    if(argc>2)
    {
        printf("%s [目录路径]
",argv[0]);
        return 0;
    }
    if(argc==2)//命令行带了目录路径
    {
       if( chdir(argv[1])==-1)//设为当前目录
        {
            perror("错误");
            return -1;
        }
    }
    listDetial();//列出相信信息
}


声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像