操作系统lab8(文件系统调用)
掌握Linux系统编程:学习如何使用系统调用与库函数

掌握Linux系统编程:学习如何使用系统调用与库函数Linux系统编程是指在Linux操作系统上进行编程的一种技能,它包括了使用系统调用和库函数来实现各种功能。
掌握Linux系统编程对于开发高性能、高可靠性的应用程序至关重要,本文将介绍如何使用系统调用和库函数进行Linux系统编程。
1.系统调用系统调用是用户空间程序与内核之间进行交互的接口,通过系统调用可以请求操作系统内核执行特定的操作。
在Linux系统中,系统调用是通过软中断来实现的。
常见的系统调用包括文件操作(如open、read、write、close)、进程管理(如fork、exec、exit)等。
在Linux系统编程中,我们可以使用C语言中的syscall函数来调用系统调用。
例如,使用syscall(SYS_open, filename, flags, mode)来打开一个文件。
另外,Linux系统还提供了一些封装了系统调用的函数库,如unistd.h、sys/types.h等。
2.库函数除了直接调用系统调用外,Linux系统编程还可以使用库函数来简化开发过程。
库函数是由C语言编写的函数库,包含了很多常用的功能,如字符串处理、内存分配、数学计算等。
在Linux系统中,常用的库函数包括stdio.h、stdlib.h、string.h等。
使用库函数可以提高代码的可读性和可维护性,同时也可以减少代码量。
例如,使用printf函数可以方便地输出文本到标准输出,而无需手动调用write系统调用。
3.示例代码下面是一个简单的示例,演示了如何使用系统调用和库函数进行文件操作:```c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>int main() {char buf[4096];int fd = open("test.txt", O_RDWR|O_CREAT, 0644); if(fd < 0) {perror("open");exit(1);}write(fd, "Hello, Linux!", 13);lseek(fd, 0, SEEK_SET);read(fd, buf, 13);printf("Read from file: %s\n", buf);close(fd);return 0;}```在上面的示例中,我们首先打开一个名为test.txt的文件,然后向文件写入文本“Hello, Linux!”,再将文件指针移动到文件开头,最后读取文件的内容并输出到标准输出。
linux系统调用流程

linux系统调用流程Linux系统调用流程主要包括以下几个步骤:1. 用户程序发起系统调用:用户程序通过调用C库函数(如read、write等)发起系统调用。
C库函数会将系统调用的参数打包到指定的寄存器中,并通过软中断(int 0x80或sysenter指令)触发一个中断。
2.内核保存现场:当用户程序触发中断后,CPU会从用户态切换到核心态,此时控制权转交给内核。
内核会保存用户程序执行的上下文(即寄存器状态、代码段选择器等),以便系统调用执行完后返回到用户程序继续执行。
3.系统调用处理:内核根据中断向量号找到系统调用处理函数的入口地址,并执行相应的处理代码。
系统调用处理函数根据调用的系统调用号(存储在EAX寄存器中)在系统调用表中查找对应的处理函数。
4.参数传递与验证:系统调用处理函数根据规定的参数个数和顺序,从寄存器或用户程序的堆栈中读取参数。
内核会对参数进行验证,确保用户程序没有越权访问操作系统资源。
5.执行系统调用:系统调用处理函数根据参数的具体内容执行相应的系统调用操作,如打开文件、读写文件、创建进程等。
内核代码会完成对应的系统调用功能,并更新相关的数据和状态。
6.返回结果:系统调用完成后,会将结果存储在指定的寄存器中,如EAX寄存器。
再将保存的用户程序上下文恢复,将控制权从内核返回到用户程序。
用户程序可以通过检查返回值来判断系统调用是否执行成功。
总结:Linux系统调用流程包括用户程序发起系统调用、内核保存现场、系统调用处理、参数传递与验证、执行系统调用和返回结果等步骤。
通过系统调用,用户程序能够获取操作系统提供的服务和资源,实现各种功能。
系统调用流程涉及用户态和核心态的切换,用户程序和内核通过寄存器和堆栈传递参数和返回结果,确保了用户程序与操作系统之间的安全和可靠交互。
操作系统lab2实验报告

操作系统lab2实验报告实验目的:本实验的目的是通过设计和实现一个简单的操作系统内核,加深对操作系统基本概念和原理的理解。
具体实验内容包括进程管理、内存管理和文件系统的设计与实现。
实验环境:1.操作系统:Linux2.编程语言:C语言一、实验背景1.1 操作系统简介操作系统是计算机系统中的一个重要组成部分,负责管理和控制计算机的各种资源,提供用户和应用程序的接口,以及协调和调度各种任务的执行。
1.2 实验目标本实验的主要目标是设计和实现一个简单的操作系统内核,包括进程管理、内存管理和文件系统等功能。
二、实验内容2.1 进程管理①进程创建描述进程创建的过程和相关数据结构,包括创建新进程的系统调用、进程控制块等。
②进程调度描述进程调度的算法和实现方式,包括进程调度队列、调度算法等。
③进程同步与通信描述进程同步和通信的机制和方法,包括信号量、互斥锁、条件变量等。
2.2 内存管理①内存分配描述内存分配的算法和实现方式,包括连续内存分配、非连续内存分配等。
②页面置换描述页面置换的算法和实现方式,包括最优页面置换算法、先进先出页面置换算法等。
2.3 文件系统①文件操作描述文件操作的系统调用和相关数据结构,包括文件打开、读写、关闭等。
②文件系统结构描述文件系统的组织结构和实现方式,包括超级块、索引节点、块位图等。
三、实验步骤3.1 环境搭建搭建实验环境,包括安装Linux操作系统、编译器等。
3.2 进程管理实现根据设计要求,实现进程创建、调度、同步与通信等功能。
3.3 内存管理实现根据设计要求,实现内存分配、页面置换等功能。
3.4 文件系统实现根据设计要求,实现文件操作和文件系统结构。
3.5 测试与调试编写测试用例,对实现的操作系统内核进行测试和调试,并记录实验结果。
四、实验结果分析分析测试结果,评估实验过程中遇到的问题和解决方法,总结操作系统内核的性能和功能特点。
五、实验总结对实验过程中的收获和经验进行总结,提出改进和优化的建议。
操作系统中系统调用实例

操作系统中系统调用实例
系统调用是操作系统内核提供给应用程序的接口,应用程序通过系统调用来访问操作系统内核提供的服务和资源,如文件、网络、内存、外设等。
下面是一个C语言中系统调用的实例:
```c
int read(int fd, void *buf, int count); //读文件数据
int write(int fd, const void *buf, int count); //写文件数据
int open(const char *pathname, int flags, mode_t mode); //打开文件
```
在这个例子中,`read`、`write`和`open`是系统调用的函数名称。
`fd`是文件描述符,`buf`是指向缓冲区的指针,`count`是要读取或写入的字节数。
`pathname`是文件的路径名,`flags`是打开文件的选项,`mode`是文件的访问模式。
系统调用的执行过程可以分为三个步骤:
1. 执行前的准备工作:包括模式切换和栈切换。
2. 执行处理程序(处理函数):这是系统调用的主要工作,根据系统调用的不同而有所差异。
3. 执行后的善后工作:包括模式切换和栈切换的回退。
不同的操作系统提供了各自的系统调用,但C语言标准库提供了一种通用的方式,使得C代码可以在不同的操作系统上运行,前提是经过不同操作系统编译器的编译。
操作系统lab8(文件系统调用)

实验八文件系统调用实验(综设实验)1.实验目的●熟悉和掌握Unix/Linux环境下的常用文件/目录的常用System Call;●了解Unix/Linux文件系统结构,特殊文件的作用和操作方法;●加深对《文件系统》一章内容的理解;2.实验要求●独立完成实验内容;●必要的文档和注释;(简单要求如下)3.实验内容编写一个文件工具filetools,使其具有以下功能:******************************0.退出1.创建新文件2.写文件3.读文件4.修改文件权限5.查看当前文件权限并退出******************************提示用户输入功能号,并根据用户输入的功能选择完成相应的功能。
程序:#include<stdio.h>#include<sys/types.h>#include<unistd.h>#include<fcntl.h>#include<sys/stat.h>#include<syslog.h>#include<string.h>#include<stdlib.h>#define MAX 128int chmd();int chmd (){int c;mode_t mode=S_IWUSR;printf(" 0. 所有用户读写执行\n 1. 所有用户只可读\n 2. 所有用户只可写\n 3. 所有用户只可执行\n 4. 用户组读写执行\n 5. 用户组只可读\n 6. 用户组只可写\n 7. 用户组只可执行\n ");printf("请选择0-7:");scanf("%d",&c);switch(c){case 0: chmod("newfile",S_IRWXU);break;case 1: chmod("newfile ",S_IRUSR);break;case 2: chmod("newfile ",S_IWUSR);break;case 3: chmod("newfile ",S_IXUSR);break;case 4: chmod("newfile ", S_IRWXG);break;case5: chmod("newfile ",S_IRGRP);break;case6: chmod("newfile ",S_IWGRP);break;case7: chmod("newfile ", S_IXGRP);break;default:printf("error 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","-l","newfile",NULL};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("请选择(0-5):");scanf("%d",&choice);switch(choice){case 0:close(fd);exit(0);case 1:fd=open("newfile",O_RDWR|O_TRUNC|O_CREAT,0750);if(fd==-1)printf("File Create Failed!\n");elseprintf("fd = %d\n",fd);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("成功改变格式!\n");break;case 5:execv(path,argv);break;default:printf("error choice!\n");}}}执行程序:程序窗口1.创建新文件newfile2.写文件为hello world!3.读文件4.修改文件权限5.查看文件权限4.参考资料●教材第六章●LINUX系统编程5.评分标准●A——选做内容/必做内容功能完善,编程风格好,人机接口界面好;●B——必做内容功能完善,完成部分选做内容,编程风格好,人机接口界面良好;●C——完成必做内容,编程风格良好;●D——能完成必做内容;●E——未按时完成必做内容,或者抄袭(雷同者全部为E)。
系统调用知识点总结

系统调用知识点总结一、系统调用的概念系统调用是操作系统内核提供给用户程序的接口,用于访问操作系统内核提供的服务和资源。
操作系统提供了各种系统调用,包括文件操作、进程管理、网络通信、内存管理、设备管理等。
用户程序通过系统调用可以向操作系统请求服务,比如打开文件、创建进程、发送网络数据等。
系统调用是用户程序和操作系统内核之间的桥梁,它为用户程序提供了访问操作系统内核功能的途径。
二、系统调用的实现原理系统调用的实现原理涉及到用户态和内核态的切换。
当用户程序执行系统调用时,会触发处理器从用户态切换到内核态,然后执行相应的内核代码。
在Linux系统中,系统调用的实现原理一般包括以下几个步骤:1. 用户程序通过系统调用指令(比如int 0x80或syscall指令)发起系统调用请求。
2. 处理器从用户态切换到内核态,执行相应的内核代码。
3. 内核根据系统调用号(syscall number)找到相应的系统调用处理函数。
4. 内核执行系统调用处理函数,完成相应的操作。
5. 内核将处理结果返回给用户程序,然后从内核态切换回用户态。
三、系统调用的调用方式系统调用的调用方式包括直接调用、库函数封装和系统命令等。
用户程序可以通过直接调用系统调用指令来执行系统调用,也可以通过库函数封装的方式来调用系统调用,比如C 标准库中的文件操作函数(如open、read、write等)就是封装了系统调用的库函数,用户程序可以直接调用这些库函数来进行文件操作。
此外,用户程序还可以通过系统命令来触发系统调用,比如在命令行中使用cat命令来读取文件就是通过系统命令来触发系统调用。
四、常用系统调用常用系统调用包括文件操作、进程管理、网络通信、内存管理、设备管理等。
在Linux系统中,常见的系统调用包括:1. 文件操作系统调用:open、read、write、close、lseek等。
2. 进程管理系统调用:fork、exec、wait、exit等。
操作系统实验-系统调用基础
实验一、系统调用基础一、实验题目在第2.3节中,我们描述了一个复制一个文件内容的程序到目标文件。
这个程序的工作原理是首先提示用户输入源文件和目标文件的名称。
使用以下命令编写这个程序Windows或POSIX API。
确保包含所有必要的错误检查,包括确保源文件存在。
一旦你正确地设计和测试了程序,如果你使用支持它的系统,使用跟踪的实用程序运行程序系统调用。
Linux系统提供strace实用程序,Solaris和Mac OS X系统使用dtrace命令。
和Windows系统一样如果不提供这些功能,您将不得不通过Windows进行跟踪版本本程序使用调试器。
二、相关原理与知识(完成实验所用到的相关原理与知识)Linux 系统调用相关基础知识Linux C 文件读写相关基础知识strace的使用三、实验过程(清晰展示实际操作过程,相关截图及解释)为了模拟cp命令,我们主要通过命令行来传递参数,对于参数数量不符合的输入则直接终止程序。
if (argc != 3){puts("Usage: ./mycp source_file_path destination_file_path");exit(0);}对于要被拷贝的源文件,比较常规的思路是逐字节读入,若是读到EOF 则说明读取到了文件末尾;但是在Linux 下我们可以直接使用fstat() 函数将一个文件的所有相关信息记录到一个stat结构体中,通过其st_size成员直接获取其长度,之后就可以直接通过read(fd, buf, st.st_size) 读入文件内容。
src_fd = open(argv[1], O_RDONLY);if (src_fd == -1){puts("Failed to open the source file!");exit(-1);}printf("fd of src: %d\n", src_fd);fstat(src_fd, &src_st); // get source file lengthbuf = (char*) malloc(sizeof(char) * src_st.st_size);if (buf == NULL){puts("Malloc error!");exit(-1);}read(src_fd, buf, src_st.st_size);写入文件则可以通过fwrite 完成,相比起我们手动通过文件描述符对文件进行操作而言,由glibc封装的相关文件操作更为方便,这里便不再赘叙。
操作系统--linux系统调用
实验报告一、理论分析(分值:20%)【从操作系统原理(理论)的角度阐述系统功能调用的过程】1、函数声明中都有asmlinkage限定词,用于通知编译器仅从栈中提取该函数的参数。
2、系统调用getXXX()在内核中被定义为sys_getXXX()。
系统调用号:在linux中,每个系统调用都赋予一个系统调用号,通过这个独一无二的号就可以关联系统调用。
当用户空间的进程执行一个系统调用的时候,这个系统调用号就被用来指明到底要执行哪个系统调用;进程不会提及系统调用的名称。
系统调用号一旦分配就不能再有任何变更(否则编译好的应用程序就会崩溃),如果一个系统调用被删除,它所占用的系统调用号也不允许被回收利用。
Linux 有一个"未使用"系统调用sys_ni_syscall(),它除了返回-ENOSYS外不做任何其他工作,这个错误号就是专门针对无效的系统调用而设的。
内核记录了系统调用表中所有已注册过的系统调用的列表,存储在sys_call_table中。
它与体系结构有关,一般在entry.s中定义。
这个表中为每一个有效的系统调用指定了唯一的系统调用号。
3、Makefile控制着整个内核的编译,在每个子目录下调用编译.c 文件,生成.o文件,生成新的内核。
会把新编译的sys_hello内核加入到系统调用中。
系统调用表geditsyscall_32.tbl中加入354 i386 hello sys_hello,当系统调用时可以在调用表中找到系统调用的号。
4、在syscalls.h中添加定义的内容的引用函数。
5、编译执行结果。
二、设计与实现(分值:30%)【阐述在Linux中添加系统功能调用的方法】1、在内核目录下创建hello文件夹 mkdir hello2、进入hello文件夹 cd hello3、创建hello.c的文件 vim hello.c4、加入代码#include <linux/kernel.h>asmlinkage long sys_hello(void){printk(“Hello world\n”);return 0;}5、在hello文件夹下添加Makefile文件 vim Makefile在文件里添加 obj-y := hello.o6、返回内核的根目录中,打开Makefile文件,在842行添加代码 vim Makefile 将core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/改为core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ hello/ 7、打开系统调用表 cd arch/x86/syscallsVim syscall_32.tbl在文件最后一行添加354 i386 hello sys_hello8、在调用函数名的文件中加入添加的函数cd include/linux/Vim syscalls.hasmlinkage long sys_hello(void);9、进行编译cd /usr/src/linux-3.16/sudo make menuconfigsudo make oldconfigmake -j410、安装编译好的内核sudo make modules_install installshutdown -r now重启后选择新的内核载入测试uname -r11、编写测试文件hello.c#include <stdio.h>#include <linux/kernel.h>#include <sys/syscall.h>#include <unistd.h>int main(){printf("%ld\n", syscall(354));return 0;}12、编译测试gcc -o hello.c hello./hello.outdmesg三、实验结果(分值:10%)【对实验结果进行简要分析和说明】测试文件调用系统调用号354,并且将返回结果0输出,dmesg可以将开机显示结果输出查看。
C语言系统调用总览
C语言系统调用总览C语言是一种广泛应用于系统级编程和软件开发的编程语言。
在C 语言中,系统调用是与操作系统交互的关键。
本文将为您提供一个关于C语言系统调用的全面总览,介绍各种常用的系统调用及其功能。
一、概述系统调用是操作系统提供给应用程序的接口,通过系统调用,应用程序可以获取操作系统的功能和资源。
C语言通过调用库函数来间接地访问操作系统提供的系统调用。
在C语言中,我们可以使用系统调用来执行诸如文件操作、进程管理、网络通信等各种任务。
二、文件操作系统调用文件操作是C语言中常见的任务之一。
以下是几个常用的文件操作系统调用:1. open()open()函数用于打开文件,并返回一个文件描述符,该文件描述符可以用于后续的文件操作。
该函数接受文件名和打开模式作为参数,并返回文件描述符。
2. read()read()函数用于从已打开的文件中读取数据。
它接受文件描述符、缓冲区地址和读取的字节数作为参数,并返回实际读取的字节数。
3. write()write()函数用于向已打开的文件中写入数据。
它接受文件描述符、缓冲区地址和写入的字节数作为参数,并返回实际写入的字节数。
4. close()close()函数用于关闭已打开的文件。
它接受文件描述符作为参数,并返回关闭操作的状态。
三、进程管理系统调用进程管理是操作系统中一个重要的功能,下面是几个常用的进程管理系统调用:1. fork()fork()函数用于创建一个新的进程,新进程是原有进程的副本。
它返回0给新的子进程,返回子进程的进程ID给原进程。
2. exec()exec()函数用于在当前进程中执行一个新的程序。
它接受可执行文件的路径和参数列表作为参数,并将当前进程替换为新的程序。
3. wait()wait()函数用于使一个进程等待其子进程的结束。
它返回已终止子进程的进程ID,并提供有关子进程终止状态的信息。
四、网络通信系统调用网络通信在现代应用程序中起着至关重要的作用。
linux 系统调用流程
linux 系统调用流程Linux系统调用流程一、引言Linux是一种自由开源的操作系统,其核心部分是内核。
内核负责管理计算机的硬件资源,并提供各种系统调用供用户程序使用。
本文将介绍Linux系统调用的流程,包括用户程序如何通过系统调用接口向内核发起请求以及内核如何处理这些请求。
二、系统调用的定义系统调用是用户程序与内核之间的接口。
用户程序通过调用特定的系统调用函数来请求内核执行某些操作,例如读写文件、创建进程等。
内核接收到这些请求后,会进行相应的处理并返回结果给用户程序。
三、系统调用的流程1. 用户程序发起系统调用请求用户程序通过调用系统调用函数向内核发起请求。
这些系统调用函数通常由C库提供,并在用户程序中使用。
用户程序需要提供相应的参数,以告知内核所需的操作类型和操作对象。
2. 用户程序转入内核态用户程序发起系统调用请求后,会进入内核态。
在内核态下,用户程序的权限更高,可以执行一些普通用户无法执行的操作,例如访问硬件资源。
3. 内核处理系统调用请求内核接收到系统调用请求后,会根据请求的类型和参数进行相应的处理。
内核会首先检查请求的合法性,验证用户程序的权限和参数的有效性。
如果请求合法,内核会执行相应的操作;如果请求非法,内核会返回错误信息给用户程序。
4. 内核执行系统调用操作内核根据系统调用请求的类型和参数执行相应的操作。
例如,如果用户程序请求打开一个文件,内核会检查文件是否存在,并分配相应的文件描述符。
如果用户程序请求创建一个进程,内核会为进程分配资源并初始化进程上下文。
5. 内核返回结果给用户程序内核在执行完系统调用操作后,会将结果返回给用户程序。
如果操作成功,内核会返回相应的数据或完成状态;如果操作失败,内核会返回错误码,用户程序可以根据错误码进行相应的处理。
6. 用户程序继续执行用户程序在接收到内核返回的结果后,会根据结果进行相应的处理。
如果操作成功,用户程序可以继续执行后续的逻辑;如果操作失败,用户程序可以根据错误码采取相应的措施,例如重新尝试或向用户报告错误信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八文件系统调用实验(综设实验)
1.实验目的
●熟悉和掌握Unix/Linux环境下的常用文件/目录的常用System Call;
●了解Unix/Linux文件系统结构,特殊文件的作用和操作方法;
●加深对《文件系统》一章内容的理解;
2.实验要求
●独立完成实验内容;
●必要的文档和注释;(简单要求如下)
3.实验内容
编写一个文件工具filetools,使其具有以下功能:
******************************
0.退出
1.创建新文件
2.写文件
3.读文件
4.修改文件权限
5.查看当前文件权限并退出
******************************
提示用户输入功能号,并根据用户输入的功能选择完成相应的功能。
程序:
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<syslog.h>
#include<string.h>
#include<stdlib.h>
#define MAX 128
int chmd();
int chmd ()
{
int c;
mode_t mode=S_IWUSR;
printf(" 0. 所有用户读写执行\n 1. 所有用户只可读\n 2. 所有用户只可写\n 3. 所有用户只可执行\n 4. 用户组读写执行\n 5. 用户组只可读\n 6. 用户组只可写\n 7. 用户组只可执行\n ");
printf("请选择0-7:");
scanf("%d",&c);
switch(c)
{
case 0: chmod("newfile",S_IRWXU);break;
case 1: chmod("newfile ",S_IRUSR);break;
case 2: chmod("newfile ",S_IWUSR);break;
case 3: chmod("newfile ",S_IXUSR);break;
case 4: chmod("newfile ", S_IRWXG);break;
case5: chmod("newfile ",S_IRGRP);break;
case6: chmod("newfile ",S_IWGRP);break;
case7: chmod("newfile ", S_IXGRP);break;
default:printf("error 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","-l","newfile",NULL};
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("请选择(0-5):");
scanf("%d",&choice);
switch(choice)
{
case 0:close(fd);
exit(0);
case 1:
fd=open("newfile",O_RDWR|O_TRUNC|O_CREAT,0750);
if(fd==-1)
printf("File Create Failed!\n");
else
printf("fd = %d\n",fd);
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("成功改变格式!\n");
break;
case 5:
execv(path,argv);
break;
default:
printf("error choice!\n");
}
}
}
执行程序:
程序窗口
1.创建新文件newfile
2.写文件为hello world!
3.读文件
4.修改文件权限
5.查看文件权限
4.参考资料
●教材第六章
●LINUX系统编程
5.评分标准
●A——选做内容/必做内容功能完善,编程风格好,人机接口界面好;
●B——必做内容功能完善,完成部分选做内容,编程风格好,人机接口界面良好;
●C——完成必做内容,编程风格良好;
●D——能完成必做内容;
●E——未按时完成必做内容,或者抄袭(雷同者全部为E)。