本例子是基于信号的同步机制实现父子进程轮流修改文件中的值。
tatic volatile sig_atomic_t sigflag; static sigset_t newmask,oldmask,zeromask; static void sig_usr(int signo) { sigflag=1; } void TELL_WAIT(void) { if(signal(SIGUSR1,sig_usr)==SIG_ERR) perror("signal error"); if(signal(SIGUSR2,sig_usr)==SIG_ERR) perror("signal error"); sigemptyset(&zeromask); sigemptyset(&newmask); sigaddset(&newmask,SIGUSR1); sigaddset(&newmask,SIGUSR2); if(sigprocmask(SIG_BLOCK,&newmask,&oldmask)<0) perror("SIG_BLOCK error"); } void TELL_PARENT(pid_t pid) { kill(pid,SIGUSR2); } void WAIT_PARENT(void) { while(sigflag==0) sigsuspend(&zeromask); sigflag=0; if(sigprocmask(SIG_SETMASK,&oldmask,NULL)) perror("SIG_SETMASK error"); } void TELL_CHILD(pid_t pid) { kill(pid,SIGUSR1); } void WAIT_CHILD(void) { while(sigflag==0) sigsuspend(&zeromask); sigflag=0; if(sigprocmask(SIG_SETMASK,&oldmask,NULL)) perror("SIG_SETMASK error"); }
以上是父子进程通过信号同步的代码实现
开始我是这样写的,先上代码
int main() { int fd; pid_t pid; char buf[3]; int number=0; int len; buf[0]='0'; buf[1]='