1.pipe

用與實現同一個進程下不同線程間的通信(跟IPC進程間通信中的具有血緣關系的進程通信實現方式一樣)

#include

#include

#include

#include

#include

using namespace std;

void *func(void * fd)

{

char str[] = "this is write thread!\n";

write( *(int*)fd, str, strlen(str) );

}

int main()

{

int fd[2];

char readbuf[1024];

if(pipe(fd) < 0)

{

printf("pipe error!\n");

}

pthread_t tid = 0;

pthread_create(&tid, NULL, func, &fd[1]);

pthread_join(tid, NULL);

sleep(3);

// read buf from child thread

read( fd[0], readbuf, sizeof(readbuf) );

printf("read buf = %s\n", readbuf);

return 0;

}

2.fifo

用於實現不同進程的線程間通信。不同進程的線程間的通信等同於不同進程間的通信。

讀線程

#include

#include

#include

#include

#include

#include

#include

#include

void *func(void *fd)

{

char readbuf[1024];

read( *(int*)fd, readbuf, 30);

printf("this is Thread_read!\n");

printf("Receive message: %s\n", readbuf);

close(*(int*)fd);

}

int main()

{

int fd;

char buff[2048];

if(mkfifo("fifo", 0666) < 0 && errno != EEXIST)

{

printf("create FIFO falied!\n");

return 0;

}

fd = open("fifo", O_RDONLY);

if(fd < 0)

{

printf("open FIFO falied!\n");

}

pthread_t tid = 0;

pthread_create(&tid, NULL, func, &fd);

pthread_join(tid, NULL);

//sleep(3);

return 0;

}

//g++ -o Thread_read Thread_read.cpp -lpthread

寫線程

#include

#include

#include

#include

#include

void *func(void * fd)

{

int wri = write(*(int*)fd, "this is Thread_write", 30);

if(wri < 0)

{

printf("wirte fifo failed!\n");

}

close(*(int*)fd);

}

int main()

{

int fd = open("fifo", O_WRONLY);

if(fd < 0)

{

printf("open fifo failed!\n");

return 0;

}

pthread_t tid = 1;

pthread_create(&tid, NULL, func, &fd);

pthread_join(tid, NULL);

// sleep(3);

return 0;

}

//g++ -o Thread_write Thread_write.cpp -lpthread

linux 有名管道pipe,linux 用無名管道pipe和有名管道fifo實現線程間通信相关推荐

  1. linux多线程编程和linux 2.6下的nptl,Linux多線程編程和Linux 2.6下的NPTL

    這幾天由於工作需要,琢磨了一下Linux下的多線程的相關資料.Linux下最常用的多線程支持庫為Pthread庫,它是glibc庫的組成部分.但是關於Pthread的說明文檔非常缺乏,特別是對POSI ...

  2. linux有名管道大小,Linux中的pipe与named pipe(FIFO),即管道和命名管道

    Linux 管道对阻塞之前一次写操作的大小有限制. 专门为每个管道所使用的内核级缓冲区确切为 4096 字节. 除非阅读器清空管道,否则一次超过 4K 的写操作将被阻塞. 实际上这算不上什么限制,因为 ...

  3. Linux如何运行pipe1,Linux C++管道之pipe

    1. 函数说明 pipe(建立管道): 1) 头文件 #include 2) 定义函数: int pipe(int filedes[2]); 3) 函数说明: pipe()会建立管道,并将文件描述词由 ...

  4. linux通信管道破裂,Linux下进程通信之管道

    每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把 ...

  5. linux 管道来删除,Linux入门基础(五):Linux管道,重定向,文本处理

    多命令协作:管道及重定向 在Linux中,大多数命令都很简单,每个命令往往只实现一个或几个很简单功能. 我们可以通过将不同功能的命令组合起来一起使用,达到完成某个复杂功能的目的 CLI下几乎所有的命令 ...

  6. Linux如何运行pipe1,Linux中的管道

    一.管道是进程间通信的一种重要手段,在linux中没有使用专门的数据结构,而是借助了文件系统的file结构和VFS索引节点inode.通过两个file结构指向同一个临时的VFS索引节点,而这个索引节点 ...

  7. [漏洞分析] CVE-2022-0847 Dirty Pipe linux内核提权分析

    CVE-2022-0847 Dirty Pipe linux内核提权分析 文章目录 CVE-2022-0847 Dirty Pipe linux内核提权分析 漏洞简介 环境搭建 漏洞原理 漏洞发生点 ...

  8. linux系统应用管道展望,linux学习——管道

    这篇文章简单介绍一下操作系统中的管道,并主要解决以下两个问题: 1.管道的内部实现 2.管道的容量? 管道是操作系统中,不同进程之间进行通信的方式. 根据通信的进程之间的关系,管道分为匿名管道和非匿名 ...

  9. 修改linux下全局数据库名,linux/unix下修改oracle数据库实例名的方法

    linux/unix下修改oracle数据库实例名的方法 2018年12月10日 | 萬仟网IT编程 | 我要评论 linux/unix下修改oracle实例名的方法 1.检查原来的数据库实例名 $ ...

最新文章

  1. linux操作这样用视频,Linux下使用mencoder对视频进行操作
  2. 对愤怒小鸟首席美术设计Ellinoora的访谈
  3. 右键添加git-bash
  4. 清除默认的内边距与外边距
  5. 非关系型数据库和关系型数据库区别(转载)
  6. 关闭迅雷首页播放视频的方法
  7. 【2011-2012 ACM-ICPC Pacific Northwest Regional Contest】Collateral Cleanup【建图拓扑排序】
  8. PMP考试扫盲:超详细的PMP考试小白攻略,必看篇
  9. htlm5实习报告_web前端实习报告.doc
  10. IE浏览器查看浏览器缓存Session
  11. springboot返回时间问题
  12. 【IoT】 产品设计之结构设计:如何设计产品按键
  13. fedora15 一些简单应用
  14. C++跨平台开源库 之三
  15. 美杜莎(Medusa)
  16. 深入boot.img格式文件结构解析
  17. Markdown整理备忘(一)-- 符号整理
  18. 2021年山东省安全员C证模拟考试及山东省安全员C证作业模拟考试
  19. ffmpeg的api里av_free和av_freep的区别
  20. CMake设置Visual Studio工程的调试环境变量和工作目录cwd的方法

热门文章

  1. 蚂蚁金服OceanBase挑战TPCC|TPC-C基准测试之数据库事务引擎挑战
  2. 到底什么成就了今天的人工智能?(上)
  3. Terraform 开发指南
  4. 之前写的 JSX 的条件语句竟然存在那么多 Bug?
  5. 无法恢复,欧洲云服务巨头数据中心起火
  6. Cloudera完善企业数据云愿景,新品进一步扩展无处不在的云体验
  7. 云评测 | OpenStack智能运维解决方案 @文末有福利!
  8. 企业微信小程序_小程序开发工具及真机调试_host配置及代理
  9. @FeignClient注解 中属性 contextId使用
  10. 前端传递多个数组以及其他参数,springboot后台如何接收