实验七 LINUX文件系统编程
一、实验目的:
(1)掌握LINUX文件系统的基本原理,结构和实现的方法
(2)掌握LINUX文件系统中文件的建立,打开,读写,执行,属性等系统调用的使用.
二、实验内容:
(1)仔细阅读提供的源代码
(2)理解LINUX文件系统的基本原理
(3)调试提供的源代码
三、实验作业:
#include #include #include #include #include #include #include #include #define MAX 128 int chmd(); int chmd () { int c; mode_t mode=S_IWUSR; printf(\" 0. 0700\\n 1. 0400\\n 2. 0200 \\n 3. 0100\\n \"); printf(\"Please input your choice(0-3):\"); scanf(\"%d\ switch(c) { case 0: chmod(\"file1\ case 1: chmod(\"file1\ case 2: chmod(\"file1\ case 3: chmod(\"file1\ default:printf(\"You have a wrong choice!\\n\"); } return(0); } main() { int fd; int num; int choice; char buffer[MAX]; struct stat buf; char* path=\"/bin/ls\"; char* argv[4]={\"ls\ while(1) { printf(\"********************************\\n\"); printf(\"0. 退出\\n\"); printf(\"1. 创建新文件\\n\"); printf(\"2. 写文件\\n\"); printf(\"3. 读文件\\n\"); printf(\"4. 修改文件权限\\n\"); printf(\"5. 查看当前文件的权限修改文件权限\\n\"); printf(\"********************************\\n\"); printf(\"Please input your choice(0-6):\"); scanf(\"%d\ switch(choice) { case 0:close(fd); exit(0); case 1: fd=open(\"file1\ if(fd==-1) printf(\"File Create Failed!\\n\"); else printf(\"fd = %d\\n\ break; case 2: num=read(0,buffer,MAX); write(fd,buffer,num); break; case 3: read(fd,buffer,MAX); write(1,buffer,num); break; case 4: chmd (); printf(\"Change mode success!\\n\"); break; case 5: execv(path,argv); break; default: printf(\"You have a wrong choice!\\n\"); } } } (1)程序分析 输出: [root@localhost root]# ./7.out ******************************** 0. 退出 1. 创建新文件 2. 写文件 3. 读文件 4. 修改文件权限 5. 查看当前文件的权限修改文件权限 ******************************** Please input your choice(0-6):0 [root@localhost root]# ./7.out ******************************** 0. 退出 1. 创建新文件 2. 写文件 3. 读文件 4. 修改文件权限 5. 查看当前文件的权限修改文件权限 ******************************** Please input your choice(0-6):1 fd = 3 ******************************** 0. 退出 1. 创建新文件 2. 写文件 3. 读文件 4. 修改文件权限 5. 查看当前文件的权限修改文件权限 ******************************** Please input your choice(0-6):2 123 ******************************** 0. 退出 1. 创建新文件 2. 写文件 3. 读文件 4. 修改文件权限 5. 查看当前文件的权限修改文件权限 ******************************** Please input your choice(0-6):3 123 ******************************** 0. 退出 1. 创建新文件 2. 写文件 3. 读文件 4. 修改文件权限 5. 查看当前文件的权限修改文件权限 ******************************** Please input your choice(0-6):3 123 ******************************** 0. 退出 1. 创建新文件 2. 写文件 3. 读文件 4. 修改文件权限 5. 查看当前文件的权限修改文件权限 ******************************** Please input your choice(0-6):4 0. 0700 1. 0400 2. 0200 3. 0100 Please input your choice(0-3):0 Change mode success! ******************************** 0. 退出 1. 创建新文件 2. 写文件 3. 读文件 4. 修改文件权限 5. 查看当前文件的权限修改文件权限 ******************************** Please input your choice(0-6):3 123 ******************************** 0. 退出 1. 创建新文件 2. 写文件 3. 读文件 4. 修改文件权限 5. 查看当前文件的权限修改文件权限 ******************************** Please input your choice(0-6):5 -rwx------ 1 root root 4 2010-12-21 21:52 file1 (2)num=read(0,buffer,MAX); write(fd,buffer,num);代码的含义? 参数buffer为指向缓冲区的指针,MAX为缓冲区的大小(以字节为单位)。函数read()实现从文件描述符fd所指定的文件中读取MAX个字节到buffer所指向的缓冲区中,返回值为实际读取的字节数。函数write实现将把num个字节从buffer指向的缓冲区中写到文件描述符fd所指向的文件中,返回值为实际写入的字节数。 (3)系统调用execv()的用途? execv()用来执行参数path字符串所代表的文件路径,execve()只需两个参数,第二个参数利用数组指针来传递给执行文件。 返回值 如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。 范例 /* 执行/bin/ls -al /etc/passwd */ #include main() { char * argv[ ]={“ls”,”-al”,”/etc/passwd”,(char*) }}; execv(“/bin/ls”,argv); } 执行 -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd (4)心得体会 因篇幅问题不能全部显示,请点此查看更多更全内容