Linux进程控制实验报告.doc_第1页
Linux进程控制实验报告.doc_第2页
Linux进程控制实验报告.doc_第3页
Linux进程控制实验报告.doc_第4页
Linux进程控制实验报告.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux进程控制实验报告实验名称: Linux进程控制实验要求:一.编写一个Linux系统C程序,由父亲创建2个子进程,再由子进程各自从控制台接收一串字符串,保存在各自的全局字符串变量中,然后正常结束。父进程调用waitpid等待子进程结束,并分别显示每个子进程的进程标识号和所接收的字符串。二. 父进程创建一子进程,父进程向子进程发送数据,子进程接收数据,并写入文件。关键问题: 一.需要用共享内存或使用vfork()函数创建子进程进行进程之间的数据共享及传递。父进程必须等待子进程结束才能继续执行。二.注意信号的使用。子进程需等待父进程发送信号才执行相应操作。父,子进程之间的通信需要用到共享内存或者父进程用vfork()创建子进程。设计思路: 一.使用共享内存实现数据共享,子进程一用shmaddr1保存输入的字符串,子进程二用shmaddr2保存字符串。父进程等待两个子进程分别输入完字符串,然后再分别把数据显示出来。 二.用共享内存的方法来实现父子进程之间的通信,首先建立共享内存区域,然后建立子进程,并让子进程等待父进程信号。在父进程中输入字符串,并把此字符串保存在共享内存区域,然后向子进程发出信号SIGUSR1,若子进程接受到SIGUSR1信号,则把父进程保存在共享内存区域的字符串取出,并把它写入文件。关键代码:一#include #include #include #include #include #include #include #define KEY 1234#define SIZE 64char* shmaddr1;char* shmaddr2; main()pid_t pid1;pid_t pid2;char* str1;char* str2;int shmid1; int shmid2; shmid1=shmget(23,SIZE,IPC_CREAT|0600); shmid2=shmget(24,SIZE,IPC_CREAT|0600); if (pid1=fork()0) printf(creat 1 fail!n); exit(0); else if(pid1=0) shmaddr1=(char*)shmat(shmid1,NULL,0); printf(creat 1 successfully!n); scanf(%s,str1); printf(you enter:%sn,str1); strcpy(shmaddr1,str1); shmdt(shmaddr1); exit(0);wait();if (pid2=fork()0) printf(creat 2 fail!n); exit(0); else if(pid2=0) shmaddr2=(char*)shmat(shmid2,NULL,0); printf(creat 2 successfully!n); scanf(%s,str2); printf(you enter:%sn,str2); strcpy(shmaddr2,str2); shmdt(shmaddr2); exit(0);wait(); shmaddr1=(char*)shmat(shmid1,NULL,0); shmaddr2=(char*)shmat(shmid2,NULL,0); printf(one is %sn,shmaddr1); printf(two is %sn,shmaddr2); shmdt(shmaddr1); shmdt(shmaddr2); shmctl(shmid1,IPC_RMID,NULL); shmctl(shmid2,IPC_RMID,NULL); exit(0);实验结果:二.#include#include#include#include#include#include#include#include#include#define key 1024#define size 160static void sign(int);int shmid;char* shmaddr;main()pid_t pid;char str20;shmid=shmget(key,size,IPC_CREAT|0600);if(pid=fork()0)perror(创建子进程错误!n);exit(0);else if(pid=0)if(signal(SIGUSR1,sign)=SIG_ERR)printf(SIGUSR1错误!n);exit(0);pause();printf(子进程结束!n);exit(0);sleep(1);shmaddr=(char*)shmat(shmid,NULL,0);printf(请输入字符串:);scanf(%s,str);strcpy(shmaddr,str);shmdt(shmaddr);kill(pid,SIGUSR1);wait();shmctl(shmid,IPC_RMID,NULL);static void sign(int signnum)int fd;char* shmaddr;if(signnum=SIGUSR1)printf(子进程接收到SIGUSR1.n);shmaddr=(char*)shmat(shmid,NULL,0);if(fd=open(testfile.txt,O_RDWR|O_CREAT|O_TRUNC)=-1)printf(n打开文件错误!n);return 0;elseprintf(写入:%sn,shmaddr);write(fd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论