博客
关于我
Linux——进程间通信(二):获取和设置文件描述符属性,匿名管道非阻塞读写特性,命名管道,创建共享内存
阅读量:90 次
发布时间:2019-02-25

本文共 589 字,大约阅读时间需要 1 分钟。

匿名管道的非阻塞读写特性

匿名管道在内核中创建一块缓冲区,进程间通过文件描述符进行通信。匿名管道的非阻塞读写特性使得读写操作不会被阻塞,除非管道已满或关闭。

获取文件描述符属性

使用fcntl函数获取读写端的文件描述符属性。F_GETFL获取当前属性,F_SETFL设置属性。例如:

int fcntl(int fd, int cmd, ...);
  • F_GETFL获取属性,不需要参数。
  • F_SETFL设置属性,需指定属性(如O_RDONLYO_WRONLYO_RDWR)。

设置非阻塞属性

设置非阻塞属性后,读写操作不会阻塞。例如:

fcntl(fd[0], F_SETFL, ret | O_NONBLOCK);

验证非阻塞读写

  • 读端读写非阻塞

    • 读端不关闭,写端不关闭:读返回-1,buf为空,错误码为EAGAIN。
    • 写端关闭:读返回-1,错误码不为EAGAIN,说明管道空。
  • 写端写非阻塞

    • 写端不关闭,读端不关闭:写返回EAGAIN,说明管道满。
    • 读端关闭:写进程成为僵尸。
  • 命名管道

    命名管道通过标识符存在,支持不同进程间通信。创建命名管道使用mkfifo,生命周期跟随进程。

    共享内存

    共享内存允许不同进程访问同一物理内存。使用shmget创建共享内存,ipcs -m查看状态。

    通过以上方法,可以充分利用匿名管道和共享内存等 IPC机制,实现高效进程间通信。

    转载地址:http://cvn.baihongyu.com/

    你可能感兴趣的文章
    Python 中如何实现字典的排序?
    查看>>
    Python 中常用的数据类型及相关操作详解
    查看>>
    python 中文乱码
    查看>>
    Python 中生成器与普通函数的区别
    查看>>
    Python 中的 *tuple 和 **dict 是什么意思?
    查看>>
    Python 中的 filter() 函数:筛选可迭代对象元素
    查看>>
    Python 中的 Pillow 不允许我打开图像(“超出限制“)
    查看>>
    Python 中的 threading 模块和 multiprocessing 模块有何区别?
    查看>>
    Python 中的 threading 模块和 multiprocessing 模块有何区别?
    查看>>
    Python 中的 Turtle 库详解
    查看>>
    Python 中的 __slots__ 属性有什么作用?
    查看>>
    Python 中的... 三点、箭头(->)、/ 分别的作用
    查看>>
    python读取json数据的id_python处理JSON数据
    查看>>
    Python 中的Duck Typing
    查看>>
    Python 中的for in 遍历生成字典、添加判断条件if
    查看>>
    Python 中的Lock与RLock
    查看>>
    Python 中的range(),arange()函数
    查看>>
    Python 中的内存管理机制
    查看>>
    Python 中的函数包装器:模型运行时和调试
    查看>>
    Python 中的列表理解和 lambda
    查看>>