实验五 linux进程控制,实验五进程控制及通信系统调用使用

41528d3028836879cd698677c3999917.gif实验五进程控制及通信系统调用使用

实验五 进程控制及通信系统调用使用四、实验内容本实验要求在 LINUX/UNIX 环境下用 C 语言编写三个多进程并发执行的程序,基本涉及了 LINUX/UNIX 进程管理子系统中较为常用的有关进程控制的系统调用。实验内容如下:⑴使用 fork()系统调用创建进程,使父、子进程分别运行不同的代码 (要求子进程在父进程之前运行):子进程:①以长格式显示当前目录的情况;②分屏显示 file1 的内容。父进程:①对 1—100 之间的自然数求和;②分屏显示 file2 的内容。程序可能涉及到的系统调用:fork(), c(), wait()#include#include#include#includemain(){pid_t pid; pid=fork();if(pid==0)子进程{system(“ls -l ./“);//cl(“/bin/ls“,“ls“,“-l“,NULL);printf(“file1:\n“);cl(“/bin/more“,“more“,“-2“,“file1“, NULL);exit(1);}else if(pid>0)父进程{ wait(NULL); int sum=0,i;for (i=0;i#include#include#includemain(){int pid;printf(“There is two times of fork\n“);pid=fork();if(pid==0){printf(“I m the son.\n“);pid=fork();if(pid>0){}//printf(“I m the child.\n“);else if(pid==0)printf(“I m the daughter.\n“);elseperror(“c error“);exit(1);}else if(pid>0) {//wait(0);printf(“I m the parent.\n“); }elseprintf(“fork failed.\n“);}⑶编程实现并发执行的父子进程通过管道实现通信。要求父进程通过读标准输入,将读入的内容写入管道;子进程通过读管道,将读取的内容写到标准输出。程序可能涉及到的系统调用及函数:fork(),pipe(),read(),write(),close()#include #include #include #include #include #include #include int main(){int fd[2],cld_pid,status;char buf[200]=““,len;char s[100]=““;printf(“Please a word\n“);scanf(“%s“,s);if (pipe(fd) == -1) { printf(“creat pipe error\n“);exit(1);}if ((cld_pid = fork()) == 0) { close(fd[1]); len = read(fd[0],buf,sizeof(buf));printf(“Child read pipe is -- %s\n“,buf);exit(0);}else {close(fd[0]); sprintf(buf,s,cld_pid);write(fd[1],buf, strlen(buf));exit(1);}}六、对本实验所使用系统调用的几点说明以下列出了几条有关进程控制系统调用的注意事项,更多的内容还需大家通过编程积累。⑴使用一次 fork()调用,会得到 两个返回值 ,用这种方式在内存中建立一个新进程。新进程是父进程(parent process)的副本,称为子进程(child process),子进程继承 了父进程的许多特性,并具有与父进程完全相同的用户级上下文。进程创建后,父、子进程并发执行,但每个进程都有自己的程序计数器 PC(注意:子进程的 PC 值与父进程的不同)。在程序中,可根据pid 变量保存的 fork()返回值的不同,使它们执行不同的分支语句。 ⑵ 系统调用 c()是一组操作,它可用于 指定新进程的运行工作。系统调用 fork()只是将父进程的用户级上下文拷贝到新进程中,而 c()系列的系统调用可以将一个可执行的二进制文件新进程的用户级上下文的存储空间上,以更改新进程的用户级上下文。如果 c()调用成功,调用进程将被覆盖,然后从新进程的入口开始执行,这样就可以用新进程取代了原来的进程,新进程的进程标识符与调用进程相同。系统调用 fork()和 c()结合使用能为程序开发提供有力的支持 ,用fork()建立子进程,在子进程中使用 c(),可实现父进程与一个包含着完全不同内容的子进程并发执行。7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值