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应用程序的组成 绝对路径和相对路径 目录名和基名 切换目录 切换到家目录 切换到上一次的目录 显示当前的工作目录 列出 ...
随机推荐
- HW1.7
public class Solution { public static void main(String[] args) { System.out.println("π = " ...
- HDU-1814 Peaceful Commission 2sat
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1814 简单的2sat题. //STATUS:C++_AC_390MS_996KB #include & ...
- openssl pem转cer
openssl x509 -in cert/2120.pem -outform der -out cert/ios20170109.cer
- 多目标遗传算法 ------ NSGA-II (部分源码解析) 临时种群生成新父代种群 fillnds.c
/* Nond-domination based selection routines */ # include <stdio.h> # include <stdlib.h> ...
- 【腾讯Bugly干货分享】手游热更新方案xLua开源:Unity3D下Lua编程解决方案
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/2bY7A6ihK9IMcA0bOFyB-Q 导语 xL ...
- RSA加密解密操作
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- ThinkPHP函数详解:M方法
M方法用于实例化一个基础模型类,和D方法的区别在于:1.不需要自定义模型类,减少IO加载,性能较好:2.实例化后只能调用基础模型类(默认是Model类)中的方法:3.可以在实例化的时候指定表前缀.数据 ...
- editplus如何设置不自动备份
依次选择:工具,参数设置,文件(默认展开的,要缩回),然后看右边“保存文件时创建备份”,前面的框不要打勾,应用,确定
- log4net(c#) 配置及使用
1. 首先从apache网站下载log4net, http://logging.apache.org/log4net/download_log4net.cgi .我下的是最新版本 log4net-1. ...
- Caused by: java.lang.NoClassDefFoundError: freemarker/cache/TemplateLoader
1.错误描写叙述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -he ...