标签:sprint .com code void image 情况 roc 识别码 sleep
响应和发送消息
signal函数
signal(int, fun)
在程序捕获到一个值的时候,调用fun
定义函数:int kill(pid_t pid, int sig);
函数说明:kill()可以用来送参数sig 指定的信号给参数pid 指定的进程。参数pid 有几种情况:
1、pid>0 将信号传给进程识别码为pid 的进程.
2、pid=0 将信号传给和目前进程相同进程组的所有进程
3、pid=-1 将信号广播传送给系统内所有的进程
4、pid<0 将信号传给进程组识别码为pid 绝对值的所有进程参数 sig 代表的信号编号可参考附录D
示例程序
# include<stdio.h> # include<signal.h> # include<unistd.h> int wait_mark; void waiting() { while(wait_mark!=0); } void stop() { wait_mark=0; } int main() { int p1, p2; signal(SIGINT,stop); //若捕获到GIGINT信号,则执行后面的动作 while((p1=fork())==-1);//创建第一个进程 if(p1>0)//如果是父进程 { while((p2=fork())==-1);//创建第二个进程 if(p2>0)//如果是父进程 { wait_mark=1; waiting(0); //此时按下ctrl + c, 捕获到信号,程序继续往下执行 kill(p1,10); kill(p2,12); wait(); wait(); printf("parent process is killed!\n"); exit(0); } else //如果是p2进程 { wait_mark=1; signal(12,stop); waiting(); lockf(1,1,0); printf("child process 2 is killed by parent!\n"); lockf(1,0,0); exit(0); } } else { wait_mark=1; signal(10,stop); waiting(); lockf(1,1,0); printf("child process 1 is killed by parent!\n"); lockf(1,0,0); exit(0); } return 0; }
lockf(1,1,0)是锁定屏幕输出,不让其他进程可以输出到屏幕,lockf(1,0,0)则是解锁
在此程序中注释掉也行
管道的使用
nfc写的已经很好了,我这里就直接cv一下
示例代码
#include <unistd.h> #include <signal.h> #include <stdio.h> int pid1, pid2; int main() { int fd[2]; char OutPipe[100], InPipe[100]; pipe(fd); while ((pid1 = fork()) == -1); if (pid1 == 0) { lockf(fd[1], 1, 0); sprintf(OutPipe," child 1 process is sending message !"); write(fd[1], OutPipe, 50); sleep(5); lockf(fd[1], 0, 0); exit(0); } else { while ((pid2 = fork()) == -1); if (pid2 == 0) { lockf(fd[1], 1, 0); sprintf(OutPipe,"child 2 process is sending message !"); write(fd[1], OutPipe, 50); sleep(5); lockf(fd[1], 0, 0); exit(0); } else { wait(0); read(fd[0], InPipe, 50); printf("%s\n", InPipe); wait(0); read(fd[0], InPipe, 50); printf("%s\n", InPipe); exit(0); } } return 0; }
标签:sprint .com code void image 情况 roc 识别码 sleep
原文地址:https://www.cnblogs.com/shensobaolibin/p/10105159.html