/* 无名管道只能在具有亲缘关系的进程间进行通信*/
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <string.h>
#define N 64
int main()
{
pid_t pid;
int pfd[2];
ssize_t n=0;
char buf[N] = {0};
if (pipe(pfd) == -1)
{
perror("pipe");
return -1;
}
if ((pid = fork()) == -1) //创建无名管道
{
perror("fork");
return -1;
}
if (pid == 0)
{
close(pfd[0]); //关闭子进程的读管道
while (fgets(buf, N, stdin))
{
n = strlen(buf);
write(pfd[1], buf, n+1); //子进程往管道里写数据
}
}
else
{
close(pfd[1]); //关闭父进程的写管道
while (1)
{
n = read(pfd[0], buf, N); //父进程从管道里读数据
printf("n=%d, %s\n", n, buf);
}
}
return 0;
}
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <string.h>
#define N 64
int main()
{
pid_t pid;
int pfd[2];
ssize_t n=0;
char buf[N] = {0};
if (pipe(pfd) == -1)
{
perror("pipe");
return -1;
}
if ((pid = fork()) == -1) //创建无名管道
{
perror("fork");
return -1;
}
if (pid == 0)
{
close(pfd[0]); //关闭子进程的读管道
while (fgets(buf, N, stdin))
{
n = strlen(buf);
write(pfd[1], buf, n+1); //子进程往管道里写数据
}
}
else
{
close(pfd[1]); //关闭父进程的写管道
while (1)
{
n = read(pfd[0], buf, N); //父进程从管道里读数据
printf("n=%d, %s\n", n, buf);
}
}
return 0;
}