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

    你可能感兴趣的文章
    PostgreSQL配置文件--复制
    查看>>
    PostgreSQL配置文件--实时统计
    查看>>
    PostgreSQL配置文件--日志和错误
    查看>>
    PostgreSQL配置文件--资源使用(除WAL外)
    查看>>
    PostgreSQL(一)教程 -----从头开始
    查看>>
    PostgresSQL查询数据中用逗号隔开的数据以及@>与<@的区别
    查看>>
    Postgres用returning实现mysql的last_insert_id
    查看>>
    postgres访问认证配置文件pg_hba.conf
    查看>>
    Postgres间隔大量写IO的解决办法
    查看>>
    Posting JSON to Spring MVC Controller
    查看>>
    Qt开发——可隐藏的对话框
    查看>>
    Qt开发——QWebEngineView简易网络浏览器(二)
    查看>>
    Postman List类型传参方法
    查看>>
    Qt开发——QWebEngineView浏览器开发
    查看>>
    Qt开发——QThread多线程初探
    查看>>
    Postman —— 实现接口自动化测试!
    查看>>
    Qt开发——QStackedWidget嵌入式窗体切换
    查看>>
    Qt开发——QSplashScreen程序启动图
    查看>>
    Postman 内置的动态变量
    查看>>
    Qt开发——QProgressBar/QProgressDialog进度条
    查看>>