Linux无名管道通信介绍
Linux下无名管道一般仅用于父子进程间的通信;
测试代码如下
//file name: fifo_test.c
#include <sys/prctl.h>
#include "fifo_test.h"
int
main(int argc, char **argv)
{
int ret = 0;
char buf[32] = {'\0'};
int pipe_fd[2]; //0---read 1--write
pid_t pid;
if(pipe(pipe_fd)<0)
{
printf("pipe create error/n");
return -1;
}
if((pid=fork())==0) //子进程
{
close(pipe_fd[0]);
prctl(PR_SET_NAME, "child");
while(1)
{
strcpy(buf, "hi, from child process!");
ret=write(pipe_fd[1],buf,sizeof(buf));
sleep(3);//
}
}
close(pipe_fd[1]);
while(1)
{
ret=read(pipe_fd[0],buf,sizeof(buf));
printf("father process, recv msg: %s\n",buf);
}
return 0;
}
编译
gcc -c fifo_test.c -o fifo_test.o -Wall -g
gcc fifo_test.o -o fifo_test -Wall -g
执行结果
./fifo_test
father process, recv msg: hi, from child process!, len: 32
father process, recv msg: hi, from child process!, len: 32
father process, recv msg: hi, from child process!, len: 32
Linux无名管道通信介绍的更多相关文章
- linux命名管道通信过程
前一个道,这节学习命名管道. 二命名管道 无名管道仅仅能用来在父子进程或兄弟进程之间进行通信,这就给没有亲缘关系的进程之间数据的交换带来了麻烦.解决问题就是本节要学习的还有一种管道通信:命名管道. 命 ...
- linux无名管道
特点 无名管道是半双工的,也就是说,一个管道要么只能读,要么只能写 只能在有共同祖先的进程间使用(父子进程.兄弟进程.子孙进程等) fork或者execve调用创建的子进程,继承了父进程的文件描述符 ...
- Linux API fork 子进程 创建 & 无名管道通信
#include<unistd.h> #include<stdio.h> int main() { ]; ]; pipe(filedes); printf("my p ...
- linux进程间通信之一:无名管道
无名管道是linux中管道通信的一种原始方法,有以下特征: 1.单工通信模式,具有固定的读端和写端: 2.管道可以看成是一种特殊的文件,对于它的读写可以使用普通的read(),write()等文件IO ...
- Linux进程间通信—管道
Linux下的进程通信手段基本上是从UNIX平台上的进程通信手段继承而来的.而对UNIX发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间 ...
- Linux 进程通信(无名管道)
无名管道 无名管道是半双工的,就是对于一个管道来讲,只能读,或者写. 无名管道只能在相关的,有共同祖先的进程间使用(即一般用户父子进程). 一个fork或者execve调用创建的子进程继承了父进程的文 ...
- Linux IPC之管道通信
2017-04-07 管道通信在linux中使用较为频繁的进程通信机制.基于unix一切皆文件的传统,管道也是一种文件.所以可以使用一般的VFS接口对管道进行读写操作,如read.write.具体管道 ...
- linux进程间通信--无名管道
管道 只能用于具有亲缘关系的进程之间通信是一个半双工的通信模式, 具有固定的写读端和写端,管道可以看成一种特殊的文件,对它可以使用普通的read.write等操作 管道的创建: #include &l ...
- Linux简单程序实例(GNU工具链,进程,线程,无名管道pipe,基于fd的文件操作,信号,scoket)
一, GNU工具链简介: (1)编译代码步骤: 预处理 -> 编译 -> 汇编 -> 链接: 预处理:去掉注释,进行宏替换,头文件包含等工作: gcc -E test.c -o te ...
随机推荐
- JVM 学习笔记(三)
一:使用jvisualvm工具查看堆内存 visualgc插件下载链接 : https://visualvm.github.io/pluginscenters.html --->选择对应版本链接 ...
- bzoj3196Tyvj1730二逼平衡树
bzoj3196Tyvj1730二逼平衡树 题意: 维护一个数列,操作:查询k在区间内的排名.查询区间内排名为k的值3.修改某一位上的数值.查询k在区间内的前驱(前驱定义为小于x,且最大的数).查询k ...
- 定时器三----js定时器
方法一: var t; //初始化定时器 $(function(){ init_fun_timer1(); }); ...
- 使用Python进行自动化测试
目前大家对Python都有一个共识,就是他对测试非常有用,自动化测试里Python用途也很广,但是Python到底怎么进行自动化测试呢?今天就简单的向大家介绍一下怎么使用Python进行自动化测试,本 ...
- 第八章:理解Window和WindowManager
Window表示一个窗口的概念. Window是一个抽象类,它的具体实现是PhoneWindow, WindowManager是外界访问Window的入口,Window的具体实现位于WindowMan ...
- pyenv虚拟环境安装
安装过程 配置yum源 # curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo ...
- react 实战:写一个年份选择器
上代码. 组件的Js文件. import React, { Component } from "react"; import Style from './myYearSelect. ...
- windows上Scrapy 框架的安装
采用在命令行直接安装的方式:pip install scrapy报错: 到这个网站下载 Twisted:https://www.lfd.uci.edu/~gohlke/pythonlibs/进入网 ...
- 分布式 ID 解决方案之美团 Leaf
分布式 ID 在庞大复杂的分布式系统中,通常需要对海量数据进行唯一标识,随着数据日渐增长,对数据分库分表以后需要有一个唯一 ID 来标识一条数据,而数据库的自增 ID 显然不能满足需求,此时就需要有一 ...
- Delphi获取文件名、不带扩展名文件名、文件所在路径、上级文件夹路径的方法
1.获取不带扩展名的文件名方法,利用ChangeFileExt函数修改传入参数的扩展为空,并不会对文件本身产生变更. ChangeFileExt(ExtractFileName('D:\KK\Test ...