Linux系统编程:(5)、进程间的通信之无名管道

(1)代码实现的功能:
父进创建无名管道程,调用fork()函数创建子进程,父进程向无名管道的写端写入数据,子进程从无名管道的读端读取数据。
(2)注意点1:
无名管道的通信方式为半双工,读写端分开,因此读端应该关闭写管道文件描述符fd[1];写端关闭读描述符fd[0]
(3)注意点2:
无名管道的写入不具有原子性,只适用于1对1亲缘进程的通信。不能像文件一样open和lseek。
(4)关闭文件描述符是取消这个进程与某一文件的联系,打开文件就是建立这个联系。所以普通文件可以同时被多个文件打开,也就是多个进程和文件建立联系。(个人理解)。

/*个人代码的运行环境为:ubuntu 16.04
 编译工具:gcc*/

#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>

int main()
{

    int fd[2];
    int err = pipe(fd);

    if(err == -1)
    {
        perror("create pipe failed:\n");
        exit(0);
    }

    pid_t num  = fork();
    if(num == 0)
    {
        printf("fd[1]:%d\n",fd[1]);
        close(fd[1]);
        char get[50];

        int get_num = read(fd[0],get,50);
        printf("%s\n",get);
        close(fd[0]);
    }
    else if(num > 0)
    {
        printf("fd[1]:%d\n",fd[1]);
        close(fd[0]);

        char sent[50];
        printf("input msessage:");
        scanf("%s",sent);
        write(fd[1],sent,strlen(sent)+1);

        wait(NULL);
    }
    else
    {
        perror("create son process failed:\n");
    }

}

这里写图片描述

原文链接:加载失败,请重新获取