无名管道pipe使用方法

来源:互联网 发布:php高级视频教程下载 编辑:程序博客网 时间:2024/06/05 06:33

有名管道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;}
原创粉丝点击