完成父子进程的通信, 父进程发送一句话后,子进程接收打印然后子进程发送一句话,父进程接收后打印
#include <stdio.h>
#include <strings.h>
#include <sys/types.h>
#include <unistd.h>
#define PRINT_ERR(str) \
do { \
fprintf(stderr, "__%d__", __LINE__); \
perror(str); \
return -1; \
} while (0);
int main(int argc, const char* argv[])
{
int pipefd1[2], pipefd2[2];
if (pipe(pipefd1) < 0)
PRINT_ERR("pipe");
if (pipe(pipefd2) < 0)
PRINT_ERR("pipe");
char buf[128] = "";
size_t res = -1;
pid_t pid = fork();
if (pid > 0) {
close(pipefd1[0]);
close(pipefd2[1]);
while (1) {
bzero(buf, sizeof(buf));
sprintf(buf, "我是你爸爸!");
if (write(pipefd1[1], buf, sizeof(buf)) < 0)
PRINT_ERR("write");
bzero(buf, sizeof(buf));
if (read(pipefd2[0], buf, sizeof(buf)) < 0)
PRINT_ERR("read");
puts(buf);
}
} else if (pid == 0) {
close(pipefd1[1]);
close(pipefd2[0]);
while (1) {
bzero(buf, sizeof(buf));
if (read(pipefd1[0], buf, sizeof(buf)) < 0)
PRINT_ERR("read");
puts(buf);
bzero(buf, sizeof(buf));
sprintf(buf, "我是你儿子!");
if (write(pipefd2[1], buf, sizeof(buf)) < 0)
PRINT_ERR("write");
}
} else {
perror("fork");
return -1;
}
return 0;
}