linux 有名管道pipe,linux 用無名管道pipe和有名管道fifo實現線程間通信
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實現線程間通信相关推荐
- linux多线程编程和linux 2.6下的nptl,Linux多線程編程和Linux 2.6下的NPTL
這幾天由於工作需要,琢磨了一下Linux下的多線程的相關資料.Linux下最常用的多線程支持庫為Pthread庫,它是glibc庫的組成部分.但是關於Pthread的說明文檔非常缺乏,特別是對POSI ...
- linux有名管道大小,Linux中的pipe与named pipe(FIFO),即管道和命名管道
Linux 管道对阻塞之前一次写操作的大小有限制. 专门为每个管道所使用的内核级缓冲区确切为 4096 字节. 除非阅读器清空管道,否则一次超过 4K 的写操作将被阻塞. 实际上这算不上什么限制,因为 ...
- Linux如何运行pipe1,Linux C++管道之pipe
1. 函数说明 pipe(建立管道): 1) 头文件 #include 2) 定义函数: int pipe(int filedes[2]); 3) 函数说明: pipe()会建立管道,并将文件描述词由 ...
- linux通信管道破裂,Linux下进程通信之管道
每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把 ...
- linux 管道来删除,Linux入门基础(五):Linux管道,重定向,文本处理
多命令协作:管道及重定向 在Linux中,大多数命令都很简单,每个命令往往只实现一个或几个很简单功能. 我们可以通过将不同功能的命令组合起来一起使用,达到完成某个复杂功能的目的 CLI下几乎所有的命令 ...
- Linux如何运行pipe1,Linux中的管道
一.管道是进程间通信的一种重要手段,在linux中没有使用专门的数据结构,而是借助了文件系统的file结构和VFS索引节点inode.通过两个file结构指向同一个临时的VFS索引节点,而这个索引节点 ...
- [漏洞分析] CVE-2022-0847 Dirty Pipe linux内核提权分析
CVE-2022-0847 Dirty Pipe linux内核提权分析 文章目录 CVE-2022-0847 Dirty Pipe linux内核提权分析 漏洞简介 环境搭建 漏洞原理 漏洞发生点 ...
- linux系统应用管道展望,linux学习——管道
这篇文章简单介绍一下操作系统中的管道,并主要解决以下两个问题: 1.管道的内部实现 2.管道的容量? 管道是操作系统中,不同进程之间进行通信的方式. 根据通信的进程之间的关系,管道分为匿名管道和非匿名 ...
- 修改linux下全局数据库名,linux/unix下修改oracle数据库实例名的方法
linux/unix下修改oracle数据库实例名的方法 2018年12月10日 | 萬仟网IT编程 | 我要评论 linux/unix下修改oracle实例名的方法 1.检查原来的数据库实例名 $ ...
最新文章
- linux操作这样用视频,Linux下使用mencoder对视频进行操作
- 对愤怒小鸟首席美术设计Ellinoora的访谈
- 右键添加git-bash
- 清除默认的内边距与外边距
- 非关系型数据库和关系型数据库区别(转载)
- 关闭迅雷首页播放视频的方法
- 【2011-2012 ACM-ICPC Pacific Northwest Regional Contest】Collateral Cleanup【建图拓扑排序】
- PMP考试扫盲:超详细的PMP考试小白攻略,必看篇
- htlm5实习报告_web前端实习报告.doc
- IE浏览器查看浏览器缓存Session
- springboot返回时间问题
- 【IoT】 产品设计之结构设计:如何设计产品按键
- fedora15 一些简单应用
- C++跨平台开源库 之三
- 美杜莎(Medusa)
- 深入boot.img格式文件结构解析
- Markdown整理备忘(一)-- 符号整理
- 2021年山东省安全员C证模拟考试及山东省安全员C证作业模拟考试
- ffmpeg的api里av_free和av_freep的区别
- CMake设置Visual Studio工程的调试环境变量和工作目录cwd的方法
热门文章
- 蚂蚁金服OceanBase挑战TPCC|TPC-C基准测试之数据库事务引擎挑战
- 到底什么成就了今天的人工智能?(上)
- Terraform 开发指南
- 之前写的 JSX 的条件语句竟然存在那么多 Bug?
- 无法恢复,欧洲云服务巨头数据中心起火
- Cloudera完善企业数据云愿景,新品进一步扩展无处不在的云体验
- 云评测 | OpenStack智能运维解决方案 @文末有福利!
- 企业微信小程序_小程序开发工具及真机调试_host配置及代理
- @FeignClient注解 中属性 contextId使用
- 前端传递多个数组以及其他参数,springboot后台如何接收