进程通信--命名管道(FIFO)
来源:互联网 发布:柴鸡蛋逆袭网络剧下载 编辑:程序博客网 时间:2024/05/19 13:22
一.命名管道(FIFO)
FIFO不同于管道之处在于它提供一 个路径名与之关联,以FIFO的文件形式存储于文件系统中。命名管道是一个设备文件,因 此,即使进程与创建FIFO的进程不存在亲缘关系,只要可以访问该路径,就能够通过FIFO 相互通信。值得注意的是,FIFO(first input first output)总是按照先进先出的原则工作,第一 个被写入的数据将首先从管道中读出。
二.命名管道的创建
int mkfifo(const char *path,mode_t mode);
int mknod(const char *path,mode_t mod,dev_t dev);
函数mknod参数中path为创建的命名管道的全路径名:mod为创建的命名管道的模式,指明其存取权限;dev为设备值,该值取决于文件创建的种类,它只在创建设备文件时才会用到。这两个函数调用成功都返回0,失败都返回-1。
三.测试用例
1.头文件
#pragma once#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<errno.h>#include<string.h>#include<fcntl.h>#include<unistd.h>#define _FIFO_NAME_ "./my_fifo"#define _SIZE_ 1024
2:server端
#include"comm.h"int main(){if(mkfifo(_FIFO_NAME_,S_IFIFO | 0666) < 0){printf("errno:%d,strerror:%s\n",errno,strerror(errno));}int fd = open(_FIFO_NAME_,O_RDONLY);if(fd < 0){printf("%s\n",strerror(errno));return 2;}char buf[_SIZE_];while(1){memset(buf,'\0',sizeof(buf));read(fd,buf,sizeof(buf) - 1);printf("client# %s\n",buf);}close(fd);return 0;}3.client端
#include"comm.h"int main(){int fd = open(_FIFO_NAME_,O_WRONLY);if(fd < 0){printf("%s\n",strerror(errno));}char buf[_SIZE_];while(1){printf("Please enter# :");memset(buf,'\0',sizeof(buf));ssize_t _s = read(1, buf, sizeof(buf) - 1);if(_s > 0){buf[_s - 1] = '\0';}write(fd,buf,strlen(buf));}return 0;}四.测试结果
以上就是本人在学习过程中的一些经验总结。当然,本人能力有限,难免会有纰漏,希望大家可以指正。
0 0
- 进程通信--命名管道(FIFO)
- 进程间通信--管道、命名管道、FIFO
- 进程通信之命名管道(FIFO)
- Linux进程通信:命名管道FIFO小结
- 进程间通信--FIFO命名管道
- Linux进程通信:命名管道FIFO小结
- 【Linux】进程间通信-命名管道FIFO
- 进程间通信___命名管道(FIFO)
- 【Linux】进程间通信-命名管道FIFO
- 进程间通信之命名管道FIFO
- 进程间通信(5) - 命名管道(FIFO)
- Linux进程通信:命名管道FIFO小结
- 【Linux进程间通信】 - 命名管道FIFO
- 进程间通信-命名管道FIFO
- 【Linux】进程间通信-命名管道FIFO
- Linux进程间通信-FIFO(命名管道)
- 【Linux】进程间通信-命名管道FIFO
- 进程间通信--命名管道(fifo)
- android23种设计模式
- Unity3D仿仙剑对话系统开发
- 七种经典排序算法最全攻略
- Androidstudio下代码混淆
- java集合框架
- 进程通信--命名管道(FIFO)
- Ubuntu安装android-ndk编译出错的处理
- 无线通信原理简述
- 237. Delete Node in a Linked List
- 算法-合并排序
- STM32 IO口的八种方式的解释
- python3学习之路(2)简单的代码结构
- 剑指offer(45)-不用加减乘除做加法
- Android 如何获取当前Activity实例对象?