Linux 进程通信之FIFO的实现

 更新时间:2020年02月11日 14:18:01   作者:weixin_43903378  
这篇文章主要介绍了Linux 进程通信之FIFO的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

FIFO通信(first in first out)

FIFO 有名管道,实现无血缘关系进程通信。

  • 创建一个管道的伪文件
    • a.mkfifo testfifo 命令创建
    • b.也可以使用函数int mkfifo(const char *pathname, mode_t mode);
  • 内核会针对fifo文件开辟一个缓冲区,操作fifo文件,可以操作缓冲区,实现进程间通信–实际上就是文件读写

man 3 mkfifo

#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);

注意事项:

FIFOs
Opening the read or write end of a FIFO blocks until the other end is also opened (by another process or thread). See
fifo(7) for further details.

打开fifo文件时候,read端会阻塞等待write端open,write端同理,也会阻塞等待另外一段打开。

代码示例:
file_w.c 写端

#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

int main(int argc, char *argv[]) {
  if(argc != 2) {
    printf("./a.out filename1\n");
    return -1;
  }
  printf("begin open w\n");
  int o_ret = open(argv[1], O_WRONLY);
  printf("end open w\n");
  char buf[256];
  int num = 0;
  while (1) {
    memset(buf, '\0', sizeof(buf));
    sprintf(buf, "xiaoming--%d", num++);
    printf("strlen(buf) = %d\n", strlen(buf));
    write(o_ret, buf, strlen(buf));
    sleep(1);
  }
  close(o_ret);
  return 0;
}
 

file_r.c 读端

#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

int main(int argc, char *argv[]) {
  if(argc != 2) {
    printf("./a.out filename1\n");
    return -1;
  }
  printf("begin open r\n");
  int o_ret = open(argv[1], O_RDONLY);
  printf("end open r\n");
  char buf[256];
  int num = 0;
  while (1) {
    memset(buf, '\0', sizeof(buf));
    read(o_ret, buf, sizeof(buf));
    printf("strlen(buf) = %d\n", strlen(buf));
    printf("read is%s\n", buf);
  }
  close(o_ret);
  return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • linux环境中常用的mysql命令介绍

    linux环境中常用的mysql命令介绍

    大家好,本篇文章主要讲的是linux环境中常用的mysql命令介绍,感兴趣的同学赶快来看一看,对你有帮助的话记得收藏一下,方便下次浏览
    2021-11-11
  • Linux下安装软件包报依赖等相关问题的解决方法

    Linux下安装软件包报依赖等相关问题的解决方法

    大家好,本篇文章主要讲的是Linux下安装软件包报依赖等相关问题的解决方法,感兴趣的同学赶快来看一看吧,对你有帮助的话,记得收藏一下
    2021-12-12
  • linux上安装zookeeper 启动和关闭的教程

    linux上安装zookeeper 启动和关闭的教程

    这篇文章主要介绍了linux上安装zookeeper 启动和关闭的教程详解,首先zookeeper运行需要java环境所以必须先装JDK,具体操作步骤大家一起看看本文吧
    2018-08-08
  • Linux系统安装Tomcat并配置Service启动关闭

    Linux系统安装Tomcat并配置Service启动关闭

    这篇文章主要介绍了Linux系统安装Tomcat并配置Service启动关闭,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 新版VPS主机管理面板WDCP安装及使用体验-国产简单易用型VPS面板

    新版VPS主机管理面板WDCP安装及使用体验-国产简单易用型VPS面板

    这篇文章主要介绍了新版VPS主机管理面板WDCP安装及使用体验-国产简单易用型VPS面板,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • linux nohup及tail-f用法

    linux nohup及tail-f用法

    这篇文章给大家分享了linux nohup及tail-f用法相关内容,有兴趣的朋友可以参考学习下。
    2018-07-07
  • Linux环境部署DNF仓库以及配置NFS共享服务

    Linux环境部署DNF仓库以及配置NFS共享服务

    本文详细介绍了如何在Linux环境下部署DNF仓库和配置NFS共享服务,DNF仓库主要用于集中管理软件包,而NFS共享服务则用于多系统间的文件共享,文章涵盖了从仓库部署、软件包同步到NFS配置和客户端访问的全过程,为系统管理员提供了全面的指导
    2025-04-04
  • Linux中使用Crontab定时监测维护Tomcat应用程序的方法

    Linux中使用Crontab定时监测维护Tomcat应用程序的方法

    定时监测发布的某项应用程序是否可用,如果不可用,立即执行处理措施,实现自动化运维工作
    2014-11-11
  • 深入理解Apache Airflow 调度器(最新推荐)

    深入理解Apache Airflow 调度器(最新推荐)

    Apache Airflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并遵循最佳优化实践,你可以确保数据管道高效可靠地运行,本文介绍Apache Airflow 调度器的相关知识,感兴趣的朋友一起看看吧
    2025-02-02
  • Linux中使用Cron定时执行SQL任务的实现步骤

    Linux中使用Cron定时执行SQL任务的实现步骤

    在Linux系统中,计划任务(Cron)是一种强大的工具,可以自动执行预定的任务,它非常适合定期运行脚本、备份数据、清理临时文件等一系列重复性任务,本文给大家介绍了如何在Linux中使用Cron定时执行SQL任务,需要的朋友可以参考下
    2024-11-11

最新评论