父进程在内核空间创建了一个共享内存,通过fork函数,父子进程通过fork函数继承了shmid,所以父子进程可以对内核中同一个对象操作,刚开始父进程不断往对象里写,然后开始发信号SIGUSR1给子进程,让子进程读。对于子进程来说,刚开始睡眠,等待父进程写,然后被内核唤醒,读共享内存。此时父进程开始睡眠,当子进程读完后,将父进程唤醒,父进程唤醒后继续写……一直循环(父子进程都通过shmat映射到自己的空间)
代码开始执行时,因为父进程要等待从键盘接收信号,所以父子进程都是S+在后台睡眠状态
#include"stdio.h"
#include"sys/types.h"
#include"sys/shm.h"
#include"signal.h"
#include"unistd.h"
#include"stdlib.h"
#include"string.h"
void myfun(int signum)
{
return;
}
int main(int argc,char *argv[])//从命令行输入3个参数,ipcrm -m