無名管道pipe的使用

有名管道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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章