linux 管道通信
下面举linux下有名管道通信的代码。
-----------------------------------------
fifo_read.c
===========
#include<errno.h>
#include<stdio.h>
#include<memory.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#define FIFO "myfifo"
int main(void)
{
int fd;
int num;
char buff[100];
if(access(FIFO,F_OK) == -1)
{
mkfifo(FIFO,0777);
}
fd = open(FIFO,O_RDONLY|O_NONBLOCK);
if(fd < 0)
{
printf("open fifo error:%s\n",strerror(errno));
}
printf("open fifo fd=%d\n",fd);
while(1)
{
num=0;
memset(buff,'\0',100);
num=read(fd,buff,100);
if(num<0)
{
printf("read fifo:%s\n",strerror(errno));
}
else if(num==0)
{
printf("no data to read.\n");
}
else
{
printf("read [%d] bytes in fifo,it is [%s].\n",num,buff);
}
sleep(1);
}
return 0;
}
----------------------
fifo_write.c
==========
#include<stdio.h>
#include<fcntl.h>
#include<memory.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#define FIFO "myfifo"
int main(void)
{
int fd;
char buff[100];
int num =0;
if(access(FIFO,F_OK)== -1)
{
mkfifo(FIFO,0777);
}
fd = open(FIFO,O_WRONLY);
if(fd < 0)
{
printf("open fifo error!\n");
}
printf("open file fd=%d\n",fd);
while(1)
{
memset(buff,'\0',100);
num=0;
printf("please write less than 100 letters:\n");
scanf("%s",buff);
num= write(fd,buff,strlen(buff));
printf("[%d] letters is written,it is [%s]\n",num,buff);
sleep(1);
}
return 0;
}
linux 管道通信的更多相关文章
- Linux管道通信
1.Linux内部自己实现了管道的同步,但多个读或者多个写之间的互斥,还需要自己实现.
- Linux下进程间管道通信小作业
在进行这次作业之前,我们先来看看什么是管道吧! 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间, ...
- Linux进程通信----匿名管道
Linux进程通信中最为简单的方式是匿名管道 匿名管道的创建需要用到pipe函数,pipe函数参数为一个数组表示的文件描述字.这个数组有两个文件描 述字,第一个是用于读数据的文件描述符第二个是用于写数 ...
- Linux学习记录--命名管道通信
命名管道通信 什么是命名管道 一个主要的限制是,它是匿名管道的应用还没有名字,因此,只有它可以用于进程间通信的方式与亲缘关系.在命名管道(named pipe或FIFO)提出后,该限制得到了克服.FI ...
- Linux进程通信——管道
管道(pipe)本质上是一种文件,管道通信本质上是通过读写文件通信,但是管道解决了文件的两个问题:限制管道大小,解决read()调用文件结束问题. 管道一个环形的缓冲区,通过两个进程以生产者/消费者的 ...
- Linux IPC之管道通信
2017-04-07 管道通信在linux中使用较为频繁的进程通信机制.基于unix一切皆文件的传统,管道也是一种文件.所以可以使用一般的VFS接口对管道进行读写操作,如read.write.具体管道 ...
- linux进程的管道通信
linux进程的管道通信 要求 编程实现进程的管道通信,掌握管道通信的同步和互斥机制. 相关函数 pipe管道 指用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名pipe文件.向管 ...
- linux命名管道通信过程
前一个道,这节学习命名管道. 二命名管道 无名管道仅仅能用来在父子进程或兄弟进程之间进行通信,这就给没有亲缘关系的进程之间数据的交换带来了麻烦.解决问题就是本节要学习的还有一种管道通信:命名管道. 命 ...
- Linux进程间通信(九)---综合实验之有名管道通信实验
实验目的 通过编写有名管道多路通信实验,进一步掌握管道的创建.读写等操作,同时复习使用select()函数实现管道的通信. 实验内容 这里采用管道函数创建有名管道(不是在控制台下输入命令mknod), ...
随机推荐
- c/c++ include 头文件的方式
在编写c/c++代码时,#include 头文件有两种方式:一个是#include “文件名”,一个是#include <文件名>.区别在于: 前者在程序编译时系统首先在源程序所在的目录( ...
- 【原创】使用开源libimobiledevice盗取iphone信息
一.概述 libimobiledevice可以理解为Linux系统下的iTunes,破解了iTunes的通信协议. 依赖:https://github.com/libimobiledevic ...
- Tensorflow描述张量的维度:阶,形状以及维数
张量 TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通. 阶 在TensorFl ...
- postman的安装和使用
在后端开发的过程中,没有前端代码可以配合测试已完成的代码是否有问题,这个时候就需要postman来帮忙解决.对于后端人员来说,postman是很好的测试工具,下面具体讲下怎么安装postman,本次安 ...
- iOS 10 Programming Fundamentals with Swift 学习笔记 0
1,a single statement can be broken into multiple lines ,For example, after an opening parenthesis is ...
- 我与java的故事
前奏 2012年开始接触java,当时还是大二因为博客园的原因我选择了java这门语言进行深入的学习.一开始看的是<动力节点>的教学视频,请原谅我已经忘记那个讲师叫什么名字.但是的项目叫E ...
- 记一次idea启动tomcat后控制台乱码的坑
IDEA的编码配置大致跟<IntelliJ IDEA 控制台中文乱码解决方案>一样 但是启动后依旧乱码!why? 后来想起来,之前因为在win10控制台下跑tomcat乱码,所以,改过一个 ...
- zuul源码(2)
路由 路由是网关的核心功能,既然在spring的框架下,那就要按Spring的规矩来. 路由规则类:org.springframework.cloud.netflix.zuul.filters.Rou ...
- QT | 一些学习心得
1. 如何使控件随着窗口大小变化而自动填充? 选中控件中最外层的那个控件,如centralWidget(不要去选中内部的小控件,这样能够保证内部的相对位置) 然后对centralWidget选择布局方 ...
- 异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“Maticsoft.Common”或它的某一个依赖项。试图加载格式不正确的程序。
异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“Maticsoft.Common”或它的某一个依赖项.试图加载格式不正确的程序. 解决方法: 点击 ...