当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 级别: 中级 吴咏炜 (adah@sh163.net) 本文阐述了一个使用 socketpair 系统调用在 Linux 上实现双向进程通讯管道的方法,并提供了一个实现。
 

 

 ·把jboss安装成windows的服务!    »显示摘要«
    摘要:首先从这里下载javaservice.exehttp://multiplan.co.uk/software/javaservice/downloads.htmlinstalljboss脚本例子中jboss必须依赖于某种(例如mysql)服务,我这里什么都不用依赖所以更改如下:intallboss.bat@echo off if "%1" == "" got......
    摘要:新浪科技讯 美国东部时间 11 月 8 日 11:38 (北京时间 11 月 9 日 0:38)消息,今天网威( novell )正式推出了 linux desktop 9 软件平台。网威声称,该软件拥有强大的性能,完全可与微软用于企业桌面电脑的视窗系统竞争,能为有关用户提供更多的选择。  网威指出,新软件将得到网威的技术支持和培训及咨询服务。网威表示,linux desktop 9 拥有和公司已......


Linux 上实现双向进程间通信管道
级别: 中级

【程序编程相关:ip phone日志5

【推荐阅读:数据操作相关函数笔记

吴咏炜 (adah@sh163.net) 【扩展信息:CString的工作原理介绍(zz)

本文阐述了一个使用 socketpair 系统调用在 linux 上实现双向进程通讯管道的方法,并提供了一个实现.

问题与常见方法

linux 提供了 popen 与 pclose 函数(1) ,用于创建与关闭管道与另外一个进程进行通信.其接口如下:

file *popen(const char *command, const char *mode);

int pclose(file *stream);

遗憾的是,popen 创建的管道只能是单向的 -- mode 只能是 "r" 或 "w" 而不能是某种组合--用户只能选择要么往里写,要么从中读,而不能同时在一个管道中进行读写.实际应用中,经常会有同时进行读写的要求,比如,我们可能希望把文本数据送往 sort 工具排序后再取回结果.此时 popen 就无法用上了.我们需要寻找其它的解决方案.

有一种解决方案是使用 pipe 函数(2)创建两个单向管道.没有错误检测的代码示意如下:

int pipe_in[2], pipe_out[2];

pid_t pid;

pipe(&pipe_in); // 创建父进程中用于读取数据的管道

pipe(&pipe_out); // 创建父进程中用于写入数据的管道

if ( (pid = fork()) == 0) { // 子进程

close(pipe_in[0]); // 关闭父进程的读管道的子进程读端

close(pipe_out[1]); // 关闭父进程的写管道的子进程写端

dup2(pipe_in[1], stdout_fileno); // 复制父进程的读管道到子进程的标准输出

dup2(pipe_out[0], stdin_fileno); // 复制父进程的写管道到子进程的标准输入

close(pipe_in[1]); // 关闭已复制的读管道

close(pipe_out[0]); // 关闭已复制的写管道

/* 使用exec执行命令 */

} else { // 父进程

close(pipe_in[1]); // 关闭读管道的写端

close(pipe_out[0]); // 关闭写管道的读端


...   下一页
 ·嵌入式系统的构建    »显示摘要«
    摘要: 近些年来,随着以计算机技术,通讯技术为主的信息技术的快速发展和internet 的广泛应用,传统的控制学科正在发生变革,出现了许多新的生长点。伴随而来的一个现象是控制专业的相当多的学生在毕业后进入了计算机,通讯行业,以致有人说学控制没有用,自动化专业可以取消了。这些情况的出现使我们控制教育工作者反复思考,传统的控制应如何拓宽它的领域?控制专业应该教什么才使学生感到有用?近些年我们在嵌入式系统及其......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE