Linux 利用管道父子进程间传递数据
[原文]
fork()函数:用于创建子进程,子进程完全复制父进程的资源,相当于父进程的拷贝。具体理解,运用父进程的同一套代码,通过判断进程ID来执行不同进程的不同任务。
返回值正常为子进程ID,出错返回负值。
pipe()函数:用于创建管道,返回负值表示创建失败。
简单实例:
功能:父进程通过管道向子进程传递字符串,然后子进程向屏幕打印出所收到的字符串。
- <pre class="objc" name="code">#include <stdio.h>
- #include <unistd.h>
- #include <sys/types.h>
- int main(void)
- {
- int n,fd[2];
- pid_t pid;
- char line[1024];
- if (pipe(fd) < 0)
- return 1;
- if ((pid=fork()) < 0)
- return 1;
- else if (pid > 0) //parent
- {
- close(fd[0]); //close parent's read-port
- write(fd[1],"I am from parent!\n",19); //write to pipe
- }
- else //child
- {
- close(fd[1]); //close child's write-port
- n = read(fd[0],line,1024); //read from pipe
- printf("%s%d\n",line,n);
- }
- printf("I am public!\n");
- return 1;
- }
运行结果:
I am public!
I am from parent!
19
I am public!
通过上面实例,可以清楚认识父子进程运行情况;通过关闭父进程读端口,关闭子进程写端口实现数据由父进程传向子进程的单向管道传输。
Linux 利用管道父子进程间传递数据的更多相关文章
- C#中使用SendMessage在进程间传递数据的实例
原文:C#中使用SendMessage在进程间传递数据的实例 1 新建解决方案SendMessageExample 在解决方案下面新建三个项目:CopyDataStruct,Receiver和Send ...
- 用WM_COPYDATA消息来实现两个进程之间传递数据
文着重讲述了如果用WM_COPYDATA消息来实现两个进程之间传递数据. 进程之间通讯的几种方法:在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.常用的方法有 1.使用内存映射 ...
- 使用 WM_COPYDATA 在进程间共享数据
开发中有时需要进程间传递数据,比如对于只允许单实例运行的程序,当已有实例运行时,再次打开程序,可能需要向当前运行的实例传递信息进行特殊处理.对于传递少量数据的情况,最简单的就是用SendMessage ...
- Linux 进程间传递文件描述符
文章目录 文件描述符 文件数据结构 共享文件 UNIX域socket实现传递文件描述符 进程间传递打开的文件描述符,并不是传递文件描述符的值.先说一下文件描述符. 文件描述符 对内核来说,所有打开的文 ...
- linux多进/线程编程(2)—— fork函数和进程间“共享”数据
参考: 1.博客1:https://www.pianshen.com/article/4305691855/ fork:在原进程的基础上"分叉"出一个子进程,即创建一个子进程. N ...
- 【Linux 进程】fork父子进程间共享数据分析
之前我们通过fork()函数,得知了父子进程之间的存在着代码的拷贝,且父子进程都相互独立执行,那么父子进程是否共享同一段数据,即是否存在着数据共享.接下来我们就来分析分析父子进程是否存在着数据共享. ...
- linux 共享内存shm_open实现进程间大数据交互
linux 共享内存shm_open实现进程间大数据交互 read.c #include <sys/types.h> #include <sys/stat.h> #includ ...
- 【转】VC 利用DLL共享区间在进程间共享数据及进程间广播消息
1.http://blog.csdn.net/morewindows/article/details/6702342 在进程间共享数据有很多种方法,剪贴板,映射文件等都可以实现,这里介绍用DLL的共享 ...
- 管道实现进程间通讯 、WaitNamedPipe
一.管道实现进程间通讯 主要的理论知识 1.什么是管道以及分类 管道是两个头的东西,每一个头各连接一个进程或者同一个进程的不同代码,依照管道的类别分有两种管道,匿名的和命名的:依照管道的传输方向分也能 ...
随机推荐
- Android自定义上拉控件SpringView
Demo 先看一下SpringView的效果图: 1.拖动灰色部分可拖动下方视图,点击jump按钮可让下方视图自行滑动. 使用方法 布局文件: <com.zql.android.springvi ...
- CodeForces 663A Rebus
A. Rebus time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- 测试一个服务器的性能,客户要求向数据库(Sqlserver2012)内 1000/s(每插入一千条数据) 的处理能力
通过jmeter很简单就可以完成,可以参考我以前的一篇文章<jmeter创建数据库(Sqlserver2012)测试>. 前提条件:一个数据库:test 数据库下面有一张表:user ...
- java 日期的格式化 输入/输出
想要得到形如2018.07.09的格式化好的当天日期 创建Date对象,调用SimpleDateFormat对象的format方法: indexstr="logstash-"+ne ...
- 三.实例演示insert/update/delect更新数据库
1.逻辑图 2.只是准备 3.代码展示 import pymysql conn=pymysql.connect( host='192.168.199.249', port=3306, user='ro ...
- Redis、MongoDB及Memcached的区别 Redis(内存数据库)
Redis.MongoDB及Memcached的区别 Redis(内存数据库) 是一个key-value存储系统(布式内缓存,高性能的key-value数据库).和Memcached类似,它支持存储的 ...
- redis 字符串和集合操作
字符串 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值,默认不存在则创建,存在则修改 r.set('name', 'zhangsan' ...
- python线程池应用场景-爬虫
import requests from bs4 import BeautifulSoup from concurrent.futures import ThreadPoolExecutor, Pro ...
- 【我的Android进阶之旅】Android插件化开发学习资料
1.目前开源的插件开发框架大致有哪些? 1. 任玉刚 的 dynamic-load-apk Github 地址:https://github.com/singwhatiwanna/dynamic-lo ...
- 用户登录失败,该用户与可信SQL Server连接无关联,错误:18452
安装好SQLServer2005(或者装了Visual Studio 2008后自带的SQLServer2005)用SQL Server身份验证的登录的时候有时候会发生这种情况: 这样的错误的原因是: ...