使用—c编程实现简单的ls命令 

具体代码如下: 
    加载的头文件有stdio.h,sys/types.h,dirent.h,unistd.h,sys/stat.h,fcntl.h,string.h等。 

void main(int argc,char **argv){     DIR *dir;     struct dirent *rdir;     struct stat statbuf;     char * buffer=”/”;     char *file_; char *p;     int lenght=strlen(argv[argc-1]);    int len=argc;     char parameter[]={‘i’,’t’,’a’,’u’,’g’,’b’,’s’}; //参数属组     if(argc==1 ||strstr(argv[argc-1],buffer)==NULL){         argv[argc++]=”./”;         dir=opendir(“./”); //打开目录文件     }else{         dir=opendir(argv[argc-1]);        file_=argv[argc-1]; //打开目录文件     }     while((rdir=readdir(dir))!=NULL){ //读取目录中的目录或者文件         if(len!=argc){             file_=rdir->d_name; //从struct dirent结构取出文件名称         }else{             p=rindex(file_,’/’);             if(strlen(p)!=1){                 strcat(file_,buffer);             }             strcat(file_,rdir->d_name);         }         int file=open(file_,O_RDONLY,0); //打开文件         stat(file_,&statbuf); //通过stat函数读取文件的状态信息放在struct stat 这个结构体中,这个结构包含文件的属组,属主,权限,时间戳,文件大小等。      int tmp=1;      while(tmp
d_ino);        }        if(rindex(argv[tmp],parameter[1])!=NULL){              printf("%10d",statbuf.st_atime);        }        if(rindex(argv[tmp],parameter[2])!=NULL){             printf("%10d",rdir->d_ino);              printf("%20d",statbuf.st_atime);             printf("%10d",statbuf.st_uid);             printf("%10d",statbuf.st_gid);            printf("%10d",statbuf.st_blocks);            printf("%10d",statbuf.st_size);        }        if(rindex(argv[tmp],parameter[3])!=NULL){             printf("%10d",statbuf.st_uid);        }        if(rindex(argv[tmp],parameter[4])!=NULL){             printf("%10d",statbuf.st_gid);        }        if(rindex(argv[tmp],parameter[5])!=NULL){            printf("%10d",statbuf.st_blocks);        }        if(rindex(argv[tmp],parameter[6])!=NULL){            printf("%10d",statbuf.st_size);        }        tmp++;    }    close(file);      //关闭打开的文件    if(len!=argc){        int j=strlen(file_);        while(j>=lenght){            file_[j--]=NULL;        }    }    printf("%20s\n",rdir->d_name);    }    closedir(dir);     //关闭打开的目录}

/* 

struct stat { mode_t st_mode; //文件对应的模式,文件,目录等 ino_t st_ino; //inode节点号 dev_t st_dev; //设备号码 dev_t st_rdev; //特殊设备号码 nlink_t st_nlink; //文件的连接数 uid_t st_uid; //文件所有者 gid_t st_gid; //文件所有者对应的组 off_t st_size; //普通文件,对应的文件字节数 time_t st_atime; //文件最后被访问的时间 time_t st_mtime; //文件内容最后被修改的时间 time_t st_ctime; //文件状态改变时间 blksize_t st_blksize; //文件内容对应的块大小 blkcnt_t st_blocks; //伟建内容对应的块数量 };
struct drient {   long d_ino;  索引节点号    off_t d_off;  在目录文件中的偏移    unsigned short d_reclen; 文件名长    unsigned char d_type; 文件类型    char d_name [NAME_MAX+1];  文件名,最长255字符 }int stat(const char *path, struct stat *struct_stat);int lstat(const char *path,struct stat *struct_stat);还有一个fstat函数。

两个函数的第一个参数都是文件的路径,第二个参数是struct stat的指针。返回值为0,表示成功执行。 

*/