您的位置:首页 > 产品设计 > UI/UE

APUE-通过管道同步父子进程

2018-03-03 18:41 405 查看
#include "ourhdir.h"
#include <sys/types.h> // pid_t

// fd1[2] 父进程读,子进程写
// fd2[2] 父进程写,子进程读
static int fd1[2], fd2[2];

// TELL_WAIT函数是在未创建子进程的时候调用的
// 子进程创建之后,父子进程都有fd1 fd2
void TELL_WAIT(void) {
if (pipe(fd1) < 0 || pipe(fd2) < 0) {
err_sys("pipe error");
}
}

void TELL_PARENT(pid_t pid) {
if (write(fd1[1], 'c', 1) != 1) {
err_sys("son write error");
}
}

void TELL_CHILD(pid_t pid) {
if (write(fd2[1], 'p', 1) != 1) {
err_sys("parent write error");
}
}

// 子进程读取管道,读取不到会被阻塞,进入等待
void WAIT_PARENT(void) {
char c;
if (read(fd2[0], &c, 1) != 1) {
err_sys("son read error");
}

if (c != 'p') {
err_quit("WAIT_PARENT: incorrect data");
}
}

// 父进程读取管道,同子进程
void WAIT_CHILD(void) {
char c;
if (read(fd1[0], &c, 1) != 1) {
err_sys("parent read error");
}

if (c != 'c') {
err_quit("WAIT_CHILD: incorrect data");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C 同步父子进程