易截截图软件、单文件、免安装、纯绿色、仅160KB

linux进程之间的通信

父子进程如何通信?
一对父子进程可以通过正常的进程间通信的办法(管道,套接字,消息队列,共享内存)进行通信,但也可以通过利用它们作为父子进程的相互关系而具有的一些特殊方法。
一个最显然的方法是父进程可以得到子进程的退出状态。
因为子进程从它的父进程继承文件描述符,所以父进程可以打开一个管道的两端,然后fork,然后父进程关闭管道这一端,子进程关闭管道另一端。这正是你从你的进程调用‘popen()’函数运行另一个程序所发生的情况,也就是说你可以向 ‘popen()’返回的文件描述符进行写操作而子进程将其当作自己的标准输入,或者你可以读取这个文件描述符来看子进程向标准输出写了什么。(‘popen()’函数的mode参数定义你的意图(译者注:mode=“r”为读,mode=“w”为写);如果你想读写都做,那么你可以并不困难地用管道自己做到)
而且,子进程继承由父进程用mmap函数映射的匿名共享内存段(或者通过映射特殊文件‘/dev/zero’);这些共享内存段不能从无关的进程访问。
Linux进程间通信的方法
1、管道(pipe)
用语具有亲缘关系进程间的通信
匿名一次性使用的,半双工。一个进程往输出端写管道,另一个进程从输入端读管道。
  #include
  int pipe(int fd[2]);
  fd[0]:表示读端
  fd[1]:表示写端
2、有名管道(named pipe)
允许无亲缘关系进程间的通信
有名管道,作为特别文件存储于文件系统中。有名管道一旦建立就存在于文件系统中,除非显示的unlink
  #include
  #include
  int mknod(const char *path,mode_t mod,dev_t dev);
  int mkfifo(const char *path,mode_t mode);
  path:创建有名管道的全路径名
  mod:创建有名管道的模式,指存取权限
  dev:设备值,该值取决于文件创建的种类,它只在创建设备文件时才会用到
  注意:有名管道创建后就可以使用了,有名管道和管道的使用方法基本是相同的。只是使用有名管道的时候必须先调用open()将其打开
  因为有名管道是一个存在于硬盘上的文件,而管道是存在于内存中的特殊文件
  下面的程序一个读管道,另一个写管道,这两个函数用的是非阻塞读写管道
#include
#include
#include
#include
#include
#include
#include
#de


相关文档:

ranfow的Linux下常见文件后缀名

ranfow的Linux下常见文件后缀名
.bz2 ------bzip2的压缩文件
.gz ------gzip的压缩文件
.tar ------tar打包文件(是包文件不是压缩文件)
.tbz------tar打包并用bzip压缩文件
.tgz-----tar打包并用gzip压缩的文件
.au -----audio文件
.gif -----gif图象文件
.html/.htm-----HTML文件
.jpg-----JPEG图象文件
.pdf ......

Linux学习笔记


Linux学习笔记
1.  一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后 ......

linux下的weblogic10乱码问题请教

我的项目是用UTF-8编码的 jsp页面提交的form表单到ctrl层用system.out.println()打印是一堆问号 但是保存到oracle数据库中的中文又是正确的,从数据库中读取中文后,在控制台上打印的是乱码 但是在页面中显示又是正确的 很奇怪 我的环境是linux下的weblogic ......

linux下安装oracle11g步骤与体会

在linux上安装oracle是一件复杂的事情,尤其对于一个生手来说,它的复杂程度远超过了linux操作系统的安装,因为不像windows那样可以直接点击sertup.exe就ok了,在安装之前你要配置环境变量,修改若干个系统文件,并且这些参数可能根据你linux版本的不同而有所不同,如果配置不正确,可能导致最终的安装失败,其它还有你的目 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号