• 大小: 10KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: C/C++
  • 标签: C  linux  ls  

资源简介

在liunux下C语言实现ls的-a,-l,-d,等功能。需要可以下载。

资源截图

代码片段和文件信息

/***************myls.c*************************
File Name:    ~/lab4/myls.c
Author:    liujun
Date Written:    2010/7/20
Date Last Modified:    2010/7/20
Purpose:   模拟终端上ls的部分功能
Brief Description: 模拟终端上ls的部分功能
***********************************************/


#include 
#include
#include
#include 
#include 
#include 
#include 
#include 
#include 

void print_l(struct dirent *dirp struct stat buf)
{
    char permission[11];
    unsigned int mask=0700;
    struct passwd *uname;
    struct group *gname;
    char *date;
    int N_BITS = 3;
    int i=3;
    int j=0;
    static char* permess[]={“---““--x““-w-““-wx““r--““r-x““rw-““rwx“};

    if     (S_ISREG(buf.st_mode))//regular
      permission[0]=‘-‘;
    else if(S_ISDIR(buf.st_mode))//directory
      permission[0]=‘d‘;
    else if(S_ISCHR(buf.st_mode))//character special
      permission[0]=‘c‘;
    else if(S_ISBLK(buf.st_mode))//block special
      permission[0]=‘b‘;
    else if(S_ISFIFO(buf.st_mode))//fifo
      permission[0]=‘p‘;
    else if(S_ISLNK(buf.st_mode))//symbolic link
      permission[0]=‘l‘;
    else if(S_ISLNK(buf.st_mode))//socket
      permission[0]=‘s‘;
    else                        //unknown
      permission[0]=‘*‘;
    while(i>0)
    {
        permission[1+j*3]=permess[(buf.st_mode & mask)>>(i-1)*N_BITS][0];
        permission[2+j*3]=permess[(buf.st_mode & mask)>>(i-1)*N_BITS][1];
        permission[3+j*3]=permess[(buf.st_mode & mask)>>(i-1)*N_BITS][2];
        i--;
        j++;
        mask>>=N_BITS;
     }
     permission[10]=‘\0‘;
     printf(“%s “permission);   
     printf(“%d “buf.st_nlink);  
     uname = getpwuid(buf.st_uid);
     gname = getgrgid(buf.st_gid);                
     printf(“%-10s%-10s“uname->pw_namegname->gr_name);
     printf(“%-6u“(unsigned int)buf.st_size);
     date = (char*)ctime(&buf.st_mtime);
     date[24]=‘\0‘;
     printf(“%-10s  %-10s\n“datedirp->d_name);     
}

void print_i(struct dirent *dirp struct stat buf)
{
   // struct stat buf;
   // stat(dirp->d_name&buf);
    printf(“%u  %-10s  “(unsigned int)buf.st_inodirp->d_name);
}

void print_li(struct dirent *dirp struct stat buf)
{
    char permission[11];
    unsigned int mask=0700;
    struct passwd *uname;
    struct group *gname;
    char *date;
    int N_BITS = 3;
    int i=3;
    int j=0;
    static char* permess[]={“---““--x““-w-““-wx““r--““r-x““rw-““rwx“};

    if     (S_ISREG(buf.st_mode))//regular
      permission[0]=‘-‘;
    else if(S_ISDIR(buf.st_mode))//directory
      permission[0]=‘d‘;
    else if(S_ISCHR(buf.st_mode))//character special
      permission[0]=‘c‘;
    else if(S_ISBLK(buf.st_mode))//block special
      permission[0]=‘b‘;
    else if(S_ISFIFO(buf.st_mode))//fifo
      permission[0]=‘p‘;
    else if(S_ISLNK(buf.st_mode))//symbolic link
      permission[0]=‘l‘;
    else if(S_ISLNK(buf.st_mode))//socket
      permission[0]=‘s‘;
    else                       

评论

共有 条评论