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

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

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

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

获取文件描述符属性

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

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

设置非阻塞属性

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

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

验证非阻塞读写

  • 读端读写非阻塞:

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

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

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

    共享内存

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

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

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

    你可能感兴趣的文章
    Pythont通过request以及BeautifulSoup爬取几千条情话
    查看>>
    pythonweb django的学习
    查看>>
    pythonweb网站开发基础django安装
    查看>>
    pythonweb网站开发基础创建django项目
    查看>>
    pythonweb网站开发基础添加应用
    查看>>
    Python_015 多线程
    查看>>
    python_73_pickle序列化(接72)
    查看>>
    python_code_418
    查看>>
    python_day10 协程 GEVENT
    查看>>
    python_day1作业
    查看>>
    Python接口自动化测试必备基础之http协议详解!
    查看>>
    python_IDE开发环境使用_建立Python源文件---python工作笔记011
    查看>>
    Python_web框架解析
    查看>>
    Python__Enter__/__Exit__vs__init__(或__new__)/__del__
    查看>>
    python_对象的基本组成和内存示意图---python工作笔记016
    查看>>
    python_开发环境介绍_交互模式使用_IDE介绍和使用---python工作笔记010
    查看>>
    python_引用的本质_栈内存和堆内存_内存示意图---python工作笔记017
    查看>>
    python_标识符_帮助系统的使用_命名规则---python工作笔记018
    查看>>
    python_海龟绘图_坐标系问题_画笔各种方法---python工作笔记013
    查看>>
    python_海龟绘图_画出奥运五环图---python工作笔记014
    查看>>