博客
关于我
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/

    你可能感兴趣的文章
    Python关于 *args 和 **kwargs 参数的详解(全)
    查看>>
    Pythonfrozenset散列算法/实现
    查看>>
    PythonGTK+3:通过单击列对树视图进行排序
    查看>>
    pythonnumpy生成二进制流_python/numpy生成的二进制文件,由C读取
    查看>>
    pythonsign函数_对python函数签名的方法详解 用python怎么写一个自签名证书
    查看>>
    PythonStudy
    查看>>
    Pythons__IMPORT__未按预期工作
    查看>>
    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框架解析
    查看>>