linux管道学习(一)
最近学习了管道 pipe,在这里进行一下总结。
这里贴一段自己的实做代码
- struct node{
- int a;
- long b;
- };
- int main()
- {
- int field[];
- pid_t pid;
- char buf[];
- int returned_count;
- pipe(field);
- //fcntl(field[0], F_SETFL, O_NONBLOCK);
- int status;
- pid = fork();
- if(pid < )
- {
- printf("Error In Fork\n");
- exit();
- }
- if(pid == )
- {
- printf("In Child Process\n");
- close(field[]);
- node testnode;
- testnode.a = ;
- testnode.b = ;
- //sleep(10);
- //write(field[1],"This is a pipe test\n",strlen("This is a pipe test"));
- //write(field[1],"This is another pipe test\n",strlen("This is another pipe test"));
- write(field[],&testnode,sizeof(testnode));
- testnode.a = ;
- testnode.b = ;
- write(field[],&testnode,sizeof(testnode));
- exit();
- }
- else
- {
- printf("In Parent Process\n");
- close(field[]);
- //read(field[0],buf,sizeof(buf));
- node ptestnode;
- read(field[],&ptestnode,sizeof(node));
- //printf("Msg %s from Child\n",buf);
- printf("Msg From Child node a= %d, b= %ld\n",ptestnode.a,ptestnode.b);
- read(field[],&ptestnode,sizeof(node));
- printf("Msg From Child node a= %d, b= %ld\n",ptestnode.a,ptestnode.b);
- //waitpid(pid,&status,0);
- }
- close(field[]);
- }
pipe作为linux进程通讯中的一种常用手段被广泛使用,函数原型为int pipe(int filedes[2]); 其中filedes中的filedes[0]代表读 filedes[1]代表写。
再不使用fcntl函数限定的情况下,管道默认是以阻塞方式进行的。
比如父进程再使用read函数读取管道内容时,如果管道为空,则read函数会阻塞等待。如果将管道设置为读非阻塞,则父进程读取不到管道内容会直接进行下一步,不再等待。
但是父进程中如果使用了wait或waitpid函数,我发现实现效果依然和管道阻塞的情况一样,等待子进程写入,读取内容后才会进行下一步,这点有待研究。
通过read的返回值来进行判断管道中的内容是否读取完毕。
例如
- node ptestnode;
- int bufcount = ;
- bufcount = read(field[],&ptestnode,sizeof(node));
- //printf("Msg %s from Child\n",buf);
- printf("Msg From Child node a= %d, b= %ld\n",ptestnode.a,ptestnode.b);
- while(bufcount)
- {
- bufcount = read(field[],&ptestnode,sizeof(node));
- if(!bufcount)
- {
- break;
- }
- printf("Msg From Child node a= %d, b= %ld\n",ptestnode.a,ptestnode.b);
- }
- printf("Pipe Read Over\n");
linux管道学习(一)的更多相关文章
- linux管道学习(二)
int main() { char* pipename = "pipe"; mkfifo(pipename,); int pid = fork(); ) { printf(&quo ...
- Linux IPC(Inter-Process Communication,进程间通信)之管道学习
1.标准流管道 管道操作支持文件流模式,用来创建链接还有一个进程的管道,通过函数popen和pclose popen的详细介绍在本blog:Linux 多进程学习中有具体介绍 2.无名管道(PIPE) ...
- 别出心裁的Linux命令学习法
别出心裁的Linux命令学习法 操作系统操作系统为你完成所有"硬件相关.应用无关"的工作,以给你方便.效率.安全.操作系统的功能我总结为两点:管家婆和服务生: 管家婆:通过进程.虚 ...
- Linux 第一次学习笔记
一.Linux 为何物 Linux 就是一个操作系统,就像你多少已经了解的 Windows(xp,7,8)和 Max OS ,至于操作系统是什么,就不用过多解释了,如果你学习过前面的入门课程,应该会有 ...
- Linux系统学习笔记:文件I/O
Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...
- 虚拟机的安装以及Linux的学习
安装虚拟机 对虚拟机的认识 其实初中的时候我就听说过虚拟机这个名词,当时的我还小,也不知道虚拟机是个什么东西,那时我傻傻的认为虚拟机只不过是电脑中的一个虚拟的计算机,没有什么实在的作用.后来随着大学课 ...
- 安装虚拟机&Linux命令学习
安装虚拟机&Linux命令学习 基于VirtualBox虚拟机安装Ubuntu 1.下载安装VirtualBox 根据自己电脑(32位操作系统)的实际情况,我在网上找了相应的VirtualBo ...
- Linux入门学习笔记2:终端命令
LINUX操作系统学习 命令 附带建 cd .. 当前路径的上一层 ../.. 当前路径的上两层 . 当前路径 - 跳转到上一次所在路径 ...
- Linux 基础学习2
目录 Linux 基础学习2 文件目录结构 文件命名规范 文件系统结构 linux应用程序的组成 绝对路径和相对路径 目录名和基名 切换目录 切换到家目录 切换到上一次的目录 显示当前的工作目录 列出 ...
随机推荐
- 小波变换和motion信号处理(二)(转)
写的太好,这是第二篇:http://www.kunli.info/2011/02/18/fourier-wavelet-motion-signal-2/ 这是<小波变换和motion信号处理&g ...
- Kooboo中主要的几个关键词中的关系
Kooboo中主要的几个关键词中的关系 Content Type //相当于数据库表 Content //相当于数据 View //部分View 她可以使用Content ...
- wave文件(*.wav)格式、PCM数据格式, goldwave 可以播放pcm raw audio
1. 音频简介 经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等. 44100HZ 16bit stereo: 每秒钟有 44100 次采 ...
- jquery判断文本域长度
<div id="result">您还可以输入100字</div> <textarea name="content" id=&qu ...
- UIImage的使用
UIImage是IOS中层级比较高的一个用来加载和绘制图像的一个类,更底层的类还有CGImage,以及IOS5.0以后新增加的CIImage.今天我们主要聊一聊UIImage的三个属性: imageO ...
- NPIV介绍
我们知道在存储区域网络(SAN:storage area network),主机(Host)能够访问后端存储(比如CLARiiON,VNX)必备的一个前提是主机必须配备HBA卡(Host Bus Ad ...
- MySQL——索引与优化
http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html 写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调 ...
- SignalR安装以及安装问题
正常节奏 介绍 SignalR 是 ASP.NET 团队正在开发的一个 Microsoft .NET Framework 库和 jQuery 插件,可能包括在以后版本的 ASP.NET 平台中. 它提 ...
- android模拟器经常出现的一些问题及解决办法
1.Unable to get view server version from device exlipse下编写好android应用程序时候,右键项目 run as android applica ...
- 动作-CCActionInterval之CCAnimation&CCAnimate
动画简单实例 v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#def ...