Linux学习笔记-匿名和命名管道读写的相同点及不同点
发布日期:2021-06-30 10:58:49 浏览次数:2 分类:技术文章

本文共 1264 字,大约阅读时间需要 4 分钟。

目录

 

 


 

理论

匿名和命名管道读写的相同性

1.默认都是阻塞性读写;

2.都适用于socket的网络通信;

3.阻塞不完整管道(有一段关闭)

a.单纯读时,在所有数据被读取后,read返回0,以表示到达了文件尾部。

b..单纯写时,则产生信号SIGPIPE,如果忽略该信号或捕捉该信号并从处理程序返回,则write返回-1,同时errno设置为EPIPE。

4.阻塞完整管道(两端都开启)

a.单纯读时,要么阻塞,要么读取到数据。

b.单纯写时,写到管道满时会出错。

5.非阻塞不完整管道(有一端关闭)

a.单纯读时直接报错;

b.单纯写时,则产生信号SIGPIPE,如果忽略该信号或捕捉该信号并从处理程序返回,则write返回-1,则同时errno设置为EPIPE。

6.非阻塞完整管道(两端都开启)

a.单纯读时直接报错;

b.单纯写时,写到管道时会出错;

 

不同点

1.打开方式不一致;

2.pipe通过fcntl系统设置O_NOBLOCK来设置非阻塞性读写;

3.FIFO通过fcntl系统调用或者open函数来设置非阻塞;

 

例子

FIFO通过fcntl系统调用或者open函数来设置非阻塞性读写

如下的源码:

fifo_read.c

#include 
#include
#include
int main(int argc, char *argv[]){ if(argc < 2){ printf("usage:%s fifo\n", argv[0]); exit(1); } printf("open fifo read... \n"); //int fd = open(argv[1], O_RDONLY); int fd = open(argv[1], O_RDONLY | O_NONBLOCK); if(fd < 0){ perror("open error"); exit(1); } else{ printf("open file success:%d\n", fd); } //从命名管道中读取数据 char buf[512]; memset(buf, 0, sizeof(buf)); while(read(fd, buf, sizeof(buf)) < 0){ perror("read error"); } printf("%s\n", buf); close(fd); exit(0);}

运行截图如下:

转载地址:https://it1995.blog.csdn.net/article/details/86103432 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Qt文档阅读笔记-QML Canvas的官方解析及实例
下一篇:Qt文档阅读笔记-QQmlApplicationEngine解析与实例(qml与C++混合编程及QQuick与widgets混合)

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月20日 13时53分41秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

数据挖掘与数据分析(三)—— 探索性数据分析EDA(多因子与复合分析) & 可视化(1)—— 假设检验(μ&卡方检验&方差检验(F检验))&相关系数(皮尔逊&斯皮尔曼) 2019-04-30
RRT算法(快速拓展随机树)的Python实现 2019-04-30
路径规划(二) —— 轨迹优化(样条法) & 局部规划(人工势能场法) & 智能路径规划(生物启发(蚁群&RVO) & 强化学习) 2019-04-30
D*算法 2019-04-30
强化学习(四) —— Actor-Critic演员评论家 & code 2019-04-30
RESTful API 2019-04-30
优化算法(四)——粒子群优化算法(PSO) 2019-04-30
数据挖掘与数据分析(三)—— 探索性数据分析EDA(多因子与复合分析) & 可视化(2)——回归分析(最小二乘法&决定系数&残差不相关)&主成分分析&奇异值分解 2019-04-30
数据在Oracle中的存储 2019-04-30
优化算法(五)—人工蜂群算法Artificial Bee Colony Algorithm(ABC) 2019-04-30
轨迹规划 trajectory planning 2019-04-30
AGV自动导引运输车 2019-04-30
Trie树(字典树) 2019-04-30
COMP7404 Machine Learing——Logistic Regression 2019-04-30
COMP7404 Machine Learing——Regularization(参数C) 2019-04-30
COMP7404 Machine Learing——KNN 2019-04-30
COMP7404 Machine Learing——SVM 2019-04-30
COMP7404 Machine Learing——Decision Tree & Random Forests 2019-04-30
COMP7404 Machine Learing——Hyperparameter Grid Search & Nested Cross-Validation 2019-04-30
COMP7404 Machine Learing——Confusion Matrix & Precision/Recall/F1 2019-04-30