四 川 大 学 计 算 机 学 院、软 件 学 院
实 验 报 告
学号:姓名: 专业:计算机科学与技术 班级:班 第 周 课程名称 Linux操作系统 实验课时 3 实验项目 Myls命令 实验时间 星期二下午 编写程序实现ls -l的功能 实验目的 实验环境 ubuntu #include #include #include #include #include 实验内容(算法、程序、步骤和方法) #include #include #include #include #include struct stat buff; char a[9]=\"---------\"; //初始化存放文件读写等权限 void showFile(); //显示文件信息 void judgeFile(); //判断文件是否具有读写等权限 int main() { } void showFile() { DIR *direct=NULL; struct dirent *direntry=NULL; direct=opendir(\".\"); //打开当前目录 while(direntry=readdir(direct)) { if(direntry->d_name[0]!='.') { char buffer[300]; sprintf(buffer,\"%s\if(lstat(buffer,&buff)==0) //不显示以\".\"开头 showFile(); return 0; 的的文件 { int i; //输出文件类型标识符 if(S_ISREG(buff.st_mode)) { } if(S_ISDIR(buff.st_mode)) { } if(S_ISCHR(buff.st_mode)) { } if(S_ISBLK(buff.st_mode)) { } if(S_ISLNK(buff.st_mode)) printf(\"b\"); printf(\"c\"); printf(\"d\"); printf(\"-\"); { } if(S_ISSOCK(buff.st_mode)) { } judgeFile(); for(i=0;i<9;i++) //显示文件权限 { } for(i=0;i<9;i++) //初始化下一个文件读写权printf(\"%c\printf(\"s\"); printf(\"l\"); 限 { } char *xt=ctime(&buff.st_mtime); //修改时a[i]='-'; 间标准化 的换行符 xt[strlen(xt)-1]='\\0'; //去掉时间格式 struct passwd *uow=getpwuid(buff.st_uid); //获取文件所有者名 //获取组名 struct group *gow=getgrgid(buff.st_gid); printf(\" %d %s %s %d %s %s\\n\>pw_name,gow->gr_name,(int)buff.st_size,xt,direntry->d_name); } void judgeFile() { if(buff.st_mode&S_IRUSR) a[0]='r'; } closedir(direct); } } if(buff.st_mode&S_IWUSR) a[1]='w'; if(buff.st_mode&S_IXUSR) a[2]='x'; if(buff.st_mode&S_IRGRP) a[3]='r'; if(buff.st_mode&S_IWGRP) a[4]='w'; if(buff.st_mode&S_IXGRP) a[5]='x'; if(buff.st_mode&S_IROTH) a[6]='r'; if(buff.st_mode&S_IWOTH) a[7]='w'; if(buff.st_mode&S_IXOTH) a[8]='x'; } 数据记录 和计算 (实验结果上,与ls -l比较) 执行程序后显示myls.c所在目录下所有文件的属性,包括: 权限模式 链接数 文件所有者 结 论 组 (结 果) 文件大小 最后修改时间 文件名 通过本次实验使我更加深入地了解了ls -l命令显示的名称所有属性值的含义,对自己编程能力的不足有了更全面的认识,对Linux下的编程有了更加熟练地操作,自己的实践能力得到了增强。 小 结 指导老师 评 议 成绩评定: 指导教师签名: