有名管道pipe函数:int pipe(int filedes[2]);
下面程序通过创建进程,父进程写入数据,子进程读取数据,从管道中读取数据。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
int main()
{
int fd[2] = {0};
int ret = pipe(fd);
if (-1 == ret)
{
perror("pipe");
exit(1);
}
pid_t pid = fork();
if (-1 == pid)
{
perror("fork");
exit(2);
}
if (0 == pid)
{
//read
char buffer[32] = {0};
while (1)
{
close(fd[1]);//子进程读数据,关闭写入端
if (-1 == read(fd[0], buffer, 32))
{
perror("read");
exit(3);
}
if (strcmp("exit", buffer) == 0)
{
close(fd[0]);
exit(0);
}
}
}
else
{
//write
char buffer[32] = {0};
while (1)
{
close(fd[0]);//父进程写数据,关闭读取端
scanf("%s", &buffer);
if (-1 == write(fd[1], buffer, strlen(buffer)))
{
perror("write");
exit(4);
}
if (strcmp("exit", buffer) == 0)
{
close(fd[1]);
exit(0);
}
printf("recv : %s\n", buffer);
memset(buffer, 0, 32);
}
}
return 0;
}