zoukankan      html  css  js  c++  java
  • Linux进程通信之管道

    进程间完成数据传递需要借助操作系统提供的特殊的方法,比如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。但现在常用的进程间通信方式有:

    管道 – 使用最简单

           pipe

           管道一般读写行为

    FIFO(有名管道):

           用于非血缘关系进程间通信

    信号 – 开销最小

    共享映射区 – 无血缘关系

           nmap

           函数的参数使用注意事项

           用于非血缘关系进程间的通信

    本地套接字 – 最稳定

    Linux下其中文件类型

    -       文件

    d     目录

    l     符号链接

    伪文件:

    s      套接字

    b     块设备

    c     字符设备

    p     管道

    其中文件、目录、符号链接是占用磁盘存储的。

    管道:

    1. 本质是一个伪文件
    2.  由两个文件描述符引进,一个表示读端,一个表示写端。
    3. 规定数据从管道的写端流入管道,从读端流出。

    管道的原理:管道实为内核使用环形队列机制,借助内核缓冲区(4K)实现。

    管道的局限性:

    1. 数据自己读不能自己写
    2. 数据一旦被读走,就不在管道中存在,不可反复读取。
    3. 由于管道采用半双工方式,因此,数据只能在一个方向上流动。
    4. 只能在由公共祖先的进程间使用管道。

    pipe()函数实现管道通信:

    /***
    pipe.c
    ***/
    #include<stdio.h>
    #include<unistd.h>
    #include<stdlib.h>
    #include<string.h>
    
    int main()
    {
        int fd[2];
        pid_t pid;
    
        int ret = pipe(fd);
        if(-1 == ret)
        {
            perror("pipe error:");
            exit(1);
        }
        pid = fork();
        if(-1 == pid)
        {
            perror("pipe error:");
            exit(1);
        }
        else if(0 == pid)  //son process read
        {
            close(fd[1]);
            char buf[1024];
            ret = read(fd[0],buf,sizeof(buf));
            if(0 == ret)
            {
                printf("ret = %d
    ",ret);
            }
            write(STDOUT_FILENO,buf,ret);
        }
        else    //father process write
        {
            sleep(1);
            close(fd[0]);
            write(fd[1],"hello pipe
    ",strlen("hello pipe
    "));
        }
        return 0;
    }
  • 相关阅读:
    推荐系统入门笔记2--信息检索 Lucene
    Mybatis多个参数,其中有hashMap的写法
    Java中fastjson的toJSONString结果为空{}
    Linux中less命令出现ESC乱码
    关于博客
    【Uni-App】关于获取手机系统信息的项目实践
    mysql 服务列表找不到
    服务网格与Istio
    ARM架构服务器如何运行EasyNVR软件提示无法识别二进制文件排查及解决
    关于EasyNVR拉流摄像头的视频流存在视频流锁定机制的问题说明
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11311586.html
Copyright © 2011-2022 走看看