编一个UNIX平台上的C程序。父进程首先创建一个无名管道,设置信号处理方式为收到信号SIGUSRl后执行信号处理程序proc,然后在创建了子进程后,显示子进程的标识数,从键盘读入一行Shell命令串,写入无名管道,并向子进程发送信号SIGUSR1,关闭管道

admin2016-05-14  40

问题 编一个UNIX平台上的C程序。父进程首先创建一个无名管道,设置信号处理方式为收到信号SIGUSRl后执行信号处理程序proc,然后在创建了子进程后,显示子进程的标识数,从键盘读入一行Shell命令串,写入无名管道,并向子进程发送信号SIGUSR1,关闭管道后,终止运行。子进程收到传来的软中断信号后在信号处理程序proc中从管道文件中读入一个Shell命令串,利用例行库中的程序执行,执行该命令串。

选项

答案在程序清单17-4中,父进程首先创建一个无名管道,设置信号处理方式为收到信号SIGUSR1后执行信号处理程序proc,然后创建子进程后,将键盘读入的Shell命令串,写入无名管道,并向子进程发送信号SIGUSR1。子进程收到传来的软中断信号后在信号处理程序proc中从管道文件中读入一个Shell命令串,利用例行库中的程序执行,执行该命令串。 程序清单17-4:pipe.c #include<stdio.h> #include<stdlib.h> #include<Signal.h> #include<string.h> int chan[2]; main() { int pid; char cmd[256]; void proc(); extern int chan[2]; pipe(chan); /*创建一个无名管道*/ signal(SIGUSRI,proc); /*设置信号处理方式*/ Pid=fork(); if(pid){ printf("Child’s PID=%d\n",pid); printf("Input cmd:"); gets(cmd); write(chan[1],cmd,strlen(cmd)+1); /*写管道*/ kill(pid,SIGUSRl); /*发信号*/ close(chan[1]); exit(0); }else{ sleep(10); exit(0); } } void proc(){ extern int chan[2]; char buf[256], read(chan[0],buf,sizeof(buf)); system(buf); /*执行命令串*/ }。

解析
转载请注明原文地址:https://kaotiyun.com/show/liNx777K
本试题收录于: 操作系统题库理工类分类
0

最新回复(0)