实验6-LINUX环境编程-2(12页).doc
《实验6-LINUX环境编程-2(12页).doc》由会员分享,可在线阅读,更多相关《实验6-LINUX环境编程-2(12页).doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-实验6- LINUX环境编程-2-第 12 页实验6、LINUX环境编程 -2学生姓名: 李亚军 学 号: 6100412196 专业班级: 卓越计科121班 1实验目的 结合文件操作,理解LINUX环境中的命令行参数的使用 。2实验内容 1编写LINUX C程序,实现简单的LINUX命令ls功能。3实验步骤 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include
2、 #define OPT_v 0x0001 /* -v 选项:查看本软件版本 */#define OPT_h 0x0002 /* -h 选项:查看本软件帮助 */#define OPT_l 0x0004 /* -l 选项:长型(long)显示 */#define OPT_a 0x0008 /* -a 选项:显示所有文件(all)*/#define OPT_R 0x0010 /* -R 选项:显示子目录内容 */#define OPT_f 0x0020 /* -f 选项:不排序 */#define DONE_SUCCESS 0typedef struct _Node char path1024;
3、 char name256; int length; struct stat st; struct _Node *pnext; nNode;int createlslink(char *path,int flag,nNode *head) DIR * dp; struct dirent *entry; struct stat statbuf; nNode *p; char abspath1024; if(dp=opendir(path)=NULL) fprintf(stderr,cannot open directory:%sn,path); return -1; if(chdir(path)
4、 = -1) fprintf(stderr,cannot cd directory:%sn,path); return -2; if(NULL=getcwd(abspath,1024) fprintf(stderr,getcwd error!n); return -3; while(entry=readdir(dp) != NULL) lstat(entry-d_name,&statbuf); if(!(flag & OPT_a) & (entry-d_name0=.) /*没有选项 -a 则不显示.开头的文件(或目录)名*/ continue; else p = (nNode *)mallo
5、c(sizeof(nNode); p-pnext = *head; *head = p; (*head)-length = strlen(entry-d_name); strcpy(*head)-path,abspath); strcpy(*head)-name,entry-d_name); memcpy(&(*head)-st),&statbuf,sizeof(struct stat); if(-1=chdir(.) fprintf(stderr,cannot cd directory:.n); return -3; if(closedir(dp) =-1) fprintf(stderr,c
6、annot close dpn); return -4; return DONE_SUCCESS;void sortlslink(nNode *head,int flag) nNode *p,*q,r; int msuccess; if(!head) return; if(flag & OPT_f) else p = head; while(p-pnext) p = p-pnext; while(p!=head) q=head; msuccess = 1; while(q-pnext) if(strcmp(q-name,q-pnext-name)0) memcpy(&r,q,sizeof(nN
7、ode); strcpy(q-name,q-pnext-name); strcpy(q-path,q-pnext-path); q-length = q-pnext-length; memcpy(&q-st,&(q-pnext-st),sizeof(q-st); strcpy(q-pnext-name,r.name); strcpy(q-pnext-path,r.path); q-pnext-length = r.length; memcpy(&(q-pnext-st),&(r.st),sizeof(r.st); msuccess = 0; if(q-pnext=p) break; q = q
8、-pnext; if(msuccess) break; p = q;void format_long_print(nNode *head,int flag) nNode * p = head; char buf12; struct passwd *password; struct group *grp; struct tm * tm_ptr; char linkfilebuf1024; char pathfilename1024; char filename256; if(!p) return; while(p) if( !strcmp(p-name,.) | !strcmp(p-name,.
9、) printf(%sn,p-name); else /*permission*/ strcpy(pathfilename,p-path); strcpy(filename,p-name); memset(buf,-,11); buf11=0; if(S_ISDIR(p-st.st_mode) buf0 = d; else if(S_ISCHR(p-st.st_mode) buf0 = c; else if(S_ISBLK(p-st.st_mode) buf0 = b; else if(S_ISFIFO(p-st.st_mode) buf0 = p; else if(S_ISLNK(p-st.
10、st_mode) buf0 = l; else if(S_ISSOCK(p-st.st_mode) buf0 = s; if(S_IRUSR&p-st.st_mode) buf1 = r; if(S_IWUSR&p-st.st_mode) buf2 = w; if(S_IXUSR&p-st.st_mode) buf3 = x; if(S_IRGRP&p-st.st_mode) buf4 = r; if(S_IWGRP&p-st.st_mode) buf5 = w; if(S_IXGRP&p-st.st_mode) buf6 = x; if(S_IROTH&p-st.st_mode) buf7
11、= r; if(S_IWOTH&p-st.st_mode) buf8 = w; if(S_IXOTH&p-st.st_mode) buf9 = x; printf(%s ,buf); /*link number*/ printf(%4d ,p-st.st_nlink); /*owner*/ password = getpwuid(p-st.st_uid); if(password) printf(%s ,password-pw_name); else printf(%d ,p-st.st_uid); /* group */ grp= getgrgid(p-st.st_gid); if(grp)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验6- LINUX环境编程-212页 实验 LINUX 环境 编程 12
限制150内