创建
#include <unistd.h>
/**
* [pipe 创建无名管道]
* @param pipefd[2] [
* 是2个元素的数组首元素地址,用来存储创建成功的无名管道的两个文件描述符
pipefd[0] :管道的读端文件描述符;
pipefd[1] : 管道的写端文件描述符;
* ]
* return [成功返回0,失败返回-1且修改errno的值]
*/
int pipe(int pipefd[2]);
实例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
int ret;
int pipefd[2];
pid_t pid;
char buf[256];
/* 创建无名管道 */
ret = pipe(pipefd);
if (ret == -1)
{
perror("pipe");
return -1;
}
/* 创建一个子进程 */
pid = fork();
if (pid == -1)
{
perror("fork");
return -1;
}
else if (pid == 0)
{
/* 子进程关闭管道文件的读文件描述符 */
close(pipefd[0]);
while(1)
{
/* 写数据:向管道发送数据 */
fgets(buf, sizeof(buf), stdin);
ret = write(pipefd[1], buf, sizeof(buf));
if (ret == -1)
{
perror("write");
return -1;
}
}
close(pipefd[1]);
exit(EXIT_SUCCESS);
}
/* 父进程关闭管道文件的写文件描述符 */
close(pipefd[1]);
while(1)
{
/* 读数据:从管道读取数据 */
memset(buf, 0, sizeof(buf));
ret = read(pipefd[0], buf, sizeof(buf));
if (ret == -1)
{
perror("read");
return -1;
}
printf("buf : %s\n", buf);
}
}
网友评论