练习:父子进程实现通信,父进程循环从终端输入数据,子进程循环打印数据,当输入quit结束。
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <semaphore.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int fd[2] = {0}; // 管道标识
pid_t pid; // 进程标识
char buf[33] = "";
// 创建管道并判断
if (pipe(fd) < 0)
{
perror("pipe err");
return -1;
}
// 判断子进程是否创建成功
if ((pid = fork()) < 0)
{
perror(" fork error");
return -1;
}
else if (pid == 0) // 子进程
{
while (1)
{
read(fd[0], buf, 32); // 通过fd[0]端口读取管道中的数据
if (strcmp(buf, "quit") == 0)
exit(0);
printf("%s \n", buf);
}
}
else // 父进程
{
while (1)
{
// 输入
scanf("%s", buf);
// 通过fd[1]写端向管道写入数据
write(fd[1], buf, 32);
if (strcmp(buf, "quit") == 0)
exit(0);
}
}
wait(NULL);
return 0;
}