ubuntu 编写自己的ls命令
2015-05-07 15:38
323 查看
Refer: ubuntu 编写自己的ls命令
To be continue….
#include <stdio.h> #include <sys/types.h> #include <dirent.h> #include <sys/stat.h> #include <string.h> #include <unistd.h> #include <grp.h> #include <pwd.h> #include <time.h> int cmp(const void *a, const void *b) { return strcmp((char *)a, (char *)b); } int display_file(char *path, char *filename) { struct stat st; int i; struct passwd *pw; struct group *gr; struct tm *tm; stat(path, &st); switch(st.st_mode &S_IFMT) { case S_IFREG: printf("-"); break; case S_IFDIR: printf("d"); break; case S_IFLNK: printf("l"); break; case S_IFBLK: printf("b"); break; case S_IFCHR: printf("c"); break; case S_IFIFO: printf("p"); break; case S_IFSOCK: printf("s"); break; } for(i = 8; i >= 0; i--) { if(st.st_mode & (1 << i)) { switch(i%3) { case 2: printf("r"); break; case 1: printf("w"); break; case 0: printf("x"); break; } } else printf("-"); } pw = getpwuid(st.st_uid); gr = getgrgid(st.st_gid); printf("%2d %s %s %4ld", st.st_nlink, pw->pw_name, gr->gr_name, st.st_size); tm = localtime(&st.st_ctime); printf(" %04d-%02d-%02d %02d:%02d",tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min); printf(" %s\n", filename); return 0; } int do_ls(char dirname[]) { DIR *dir_ptr; struct dirent *direntp; struct stat st; if((dir_ptr = opendir(dirname))==NULL) fprintf(stderr, "ls1:can not open %s\n", dirname); else{ char res[500][256]; //buf[256]; int reslen = 0, i; //strcpy(buf, dirname); //strcat(buf, "/"); while((direntp = readdir(dir_ptr)) != NULL){ strcpy(res[reslen], direntp->d_name); reslen++; } closedir(dir_ptr); qsort(res, reslen, sizeof(res[0]), cmp); //strcat(buf, dirent->d_name); for(i = 0; i<reslen; i++) { char buf[256]={0}; strcpy(buf, dirname); strcat(buf, "/"); strcat(buf, res[i]); if(stat(buf, &st)) { perror("stat"); return -1; } //if(res[i][0] != '.') //display_file(buf, dirent->d_name); display_file(buf, res[i]); //printf("%s\n", res[i]); } } } int main(int argc, char* argv[]) { struct stat st; char buf[1024]; if (argc == 1){ do_ls("."); return 0; } if(stat(argv[1], &st) < 0) { // do_ls("."); perror("stat"); return 0; } if((st.st_mode & S_IFMT) == S_IFDIR) do_ls(argv[1]); else display_file(argv[1], argv[1]); //if(argc > 1){ // int i=1; // for(i=1; i<argc; ++i) // do_ls(argv[i]); // } // else do_ls("."); return 0; }
To be continue….
相关文章推荐
- ubuntu 编写自己的ls命令
- ubuntu 编写自己的ls命令
- 自己编写的linux ls命令
- 在linux上完成自己的my_ls命令的编写(对dirent.h的研究)
- 编写自己的ls命令
- linux:编写自己的ls命令
- ubuntu 的ls 命令 的使用
- 如何来写自己的ls命令
- Shell命令编写——显示目录信息ls
- ubuntu中ls等命令失效(段错误,核已转载)
- 自己动手写shell命令之ls -R1fF
- linux入门:编写一个简单的shell(仅支持部分ls,ps命令)
- 自己编写who命令
- Ubuntu下,使用ls命令显示文件颜色相关内容及修改
- linux——ubuntu 下为自己设置一个快捷命令
- Unixls命令(不是自己写得,但有可以借鉴的地方)
- linux下ls命令的编写
- ubuntu ls命令
- 更改ubuntu下ls命令显示列表文件颜色的方法
- Ubuntu文件颜色的意义 ls命令 putty配色