2022年lab .pdf
实验九文件系统调用实验(综设实验)1. 实验目的熟悉和掌握Unix/Linux环境下的常用文件/目录的常用System Call;了解 Unix/Linux 文件系统结构,特殊文件的作用和操作方法;加深对文件系统一章内容的理解;2. 实验要求独立完成实验内容;必要的文档和注释; (简单要求如下)3. 实验内容编写一个文件工具filetools,使其具有以下功能:* 0. 退出1. 创建新文件2. 写文件3. 读文件4. 修改文件权限5. 查看当前文件权限并退出* 提示用户输入功能号, 并根据用户输入的功能选择完成相应的功能。代码:#include #include #include #include #include #include #include #include #define MAX 256 int chmd() int c; mode_t mode=S_w; printf(0.0700n 1.0400n 2.0200n 3.0100n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - printf(Please input your choice(0-3):); scanf(%d,&c); switch(c) case 0:chmod(file1,S_rwx);break; case 1:chmod(file1,S_r);break; case 2:chmod(file1,S_w);break; case 3:chmod(file1,S_x);break;/*调用chmod 函数更改文件的权限,其中第一个参数为要更改权限的文件名,第二个参数为要修改到的权限,其中,S_rwx 表示具有执行、 可读、 可写权限, S_r 表示具有可读权限,S_w 表示具有可写权限,S_x 表示具有可执行权限。*/ default:printf(Wrong choice! The choice must be chosen between 0-3.Please reinput your chioce.n); return(0); main() int fd; int num; int choice; char bufferMAX; struct stat buf; char*path=bin/ls; char*argv4=ls,-1,file1,NULL; while(1) printf( Dear User , welcome! ); printf(*n); printf(0.Exitn); printf(1.CreatNewFilen); printf(2.Writen); printf(3.Readn); printf(4.Chmodn); printf(5.Checkn); printf(*n); printf(Please input your choice between (0-6):); scanf(%d,&choice); switch(choice) case 0:close(fd); exit(0); case 1: fd=open(file1,O_RDWR|O_TRUNC|O_CREAT,0750);/ * 调 用open()名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 4 页 - - - - - - - - - 函数打开文件,其中参数O_CREAT 表示当打开的文件不存在时,创建该文件,*/if(fd=-1) printf(File Create Failed!n); else printf(fd=%dn,fd); case 2: num=read(0,buffer ,MAX);/ * 调用read()函数 ,函数的第一个参数为要读取的文件描述符,0 表示从输入流中读取文件,第二个参数表示将读取到的数据存放到buffer 缓冲区中,第三个参数为最大读取的字符个数。函数的返回值为实际读取到的字符数。 */ write(fd,buffer,num); /*调用write() 函数,该函数的第一个参数为要将数据写入的文件描述符,第二个参数为要写入的缓冲区,第三个参数为写入的字符长度*/ break; case 3: read(fd,buffer,MAX); /*将文件标识符为fd 中的文件中的数据读取到buffer 缓冲中。 */ write(1,buffer,num); /*将 buffer 缓冲区中的数据写入到输出流中,输出到显示器上。*/ break; case 4: chmd(); printf(The mode had been changed successfully!n); break; case 5: execv(path,argv);/*替换当前的进程执行终端上的指令。*/ break; default: printf(Wrong choice! The choice must be chosen between 0-3.Please reinput your chioce.n); 4. 参考资料教材第六章LINUX 系统编程5. 评分标准A选做内容/必做内容功能完善,编程风格好,人机接口界面好;B必做内容功能完善,完成部分选做内容,编程风格好,人机接口界面良好;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - C完成必做内容,编程风格良好;D能完成必做内容;E未按时完成必做内容,或者抄袭(雷同者全部为E) 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -