进程间通信(linux进程与线程学习笔记)

本文深入解析了早期UNIX系统中无名管道(pipe)、有名管道(fifo)、信号通信以及SystemV IPC(共享内存、消息队列和信号灯集)的工作原理。特别介绍了无名管道的特点,包括其单工通信和文件描述符使用。通过实例演示了如何创建和使用无名管道进行进程间通信的过程。
摘要由CSDN通过智能技术生成

 进程间通信介绍
 
    早期UNIX进程间通信方式
    
        无名信号(pipe)
        有名管道(fifo)
        信号(signal)
        
    System V IPC
    
        共享内存(share memory)
        消息队列(message queue)
        信号灯集(semaphore set)
        
    套接字(socket)
    
 无名管道特点
 
    无名管道具有以下特点:
    
        只能用于具有亲缘关系的进程之间的通信
        
        单工的通信模式,具有固定的读端和写端
        
        无名管道创建时会返回两个文件描述符,分别用于读写管道
        
 无名管道创建 - pipe
 
    #include<unistd.h>
    
    int pipe(int pdf[2]);
    
    成功时返回0,失败时返回EOF
    
    pdf 包含两个元素的整形数组,用来保存文件描述符
    
    pdf[0]用于读管道,pdf[1]用于写管道
    
 读无名管道
 
    写端存在(至少有一个进程可以通过无名管道写数据)
    
        有数据    read返回实际读取的字节数
        
        无数据    进程读阻塞
        
    写端不存在
    
        有数据    read返回实际读取的字节数
        
        无数据    read返回0
        
 写无名管道
 
    读端存在(至少有一个进程可以通过文件描述符读取管道内容)
    
        有空间    write返回实际写入字节数
        
        无空间    进程写阻塞
        
    读端不存在
    
        有空间    管道断裂!
        
        无空间    管道断裂!
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值