LINUX创建管道文件
body, table{font-family: 微软雅黑; font-size: 10pt}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}
两个进程的通信:1、管道文件;2、select 多路复用;
| ps -elf //查看系统进程
管道,半双工,一端写一端读 |
创建管道文件
mkfifo 1.pipe
| Makefile |
|
a:a.c b.c
gcc a.c -o a
gcc b.c -o b
.PHONY:clean
clean:
rm a b
|
| a.c | b.c |
|
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
int main(int argc,char** argv)
{
int fdw=open(argv[1],O_WRONLY);
printf("fdw=%d\n",fdw);
write(fdw,"hello",5);
return 0;
}
//如果打开读端,但是没有打开对应的写端,进程会卡住,等待写端打开
//管道都是要两端都打开才能正常运行,如果一段打开,一段没有就会阻塞,等待对方打开
|
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
int main(int argc,char** argv)
{
int fdr=open(argv[1],O_RDONLY);
printf("fdr=%d\n",fdr);
char buf[10]="";
read(fdr,buf,sizeof(buf));
printf("buf=%s\n",buf);
return 0;
}
//打开顺序是先打开写端,在打开写读端
|
如果管道写端关闭,读端如果read,会返回0
| 改进a.c //同时打开两个管道 | 改进b.c |
|
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<strings.h>
#include<stdio.h>
#include<string.h>
int main(int argc,char** argv)
{
int fdw=open(argv[1],O_WRONLY);
int fdr=open(argv[2],O_RDONLY);
printf("fdr=%d fdw=%d\n",fdr,fdw);
char buf[128]="";
while(1) //如果管道写端关闭,读端如果read,会返回0
{
bzero(buf,sizeof(buf));
read(0,buf,sizeof(buf));
write(fdw,buf,strlen(buf)-1); //去掉标准输入最后读到的回车
bzero(buf,sizeof(buf));
read(fdr,buf,sizeof(buf));
printf("b:%s\n",buf);
}
return 0;
}
|
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<strings.h>
#include<stdio.h>
#include<string.h>
int main(int argc,char** argv)
{
int fdr=open(argv[1],O_RDONLY);
int fdw=open(argv[2],O_WRONLY);
printf("fdr=%d fdw=%d\n",fdr,fdw);
char buf[128]="";
while(1)
{
bzero(buf,sizeof(buf));
read(fdr,buf,sizeof(buf));
printf("a:%s\n",buf);
bzero(buf,sizeof(buf));
read(0,buf,sizeof(buf));
write(fdw,buf,strlen(buf)-1); //去掉标准输入最后读到的回车
}
return 0;
}
|
LINUX创建管道文件的更多相关文章
- linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)
linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...
- linux创建用户和用户组
Linux创建用户.用户组 及 删除 在创建用户时,需要为新建用户指定一用户组,如果不指定其用户所属的工作组,自动会生成一个与用户名同名的工作组.创建用户user1的时候指定其所属工作组users,例 ...
- Linux创建修改删除用户和组
Linux 创建修改删除用户和组 介绍 在日常的维护过程中创建用户操作用的相对会多一些,但是在这个过程中涉及到的知识点就不单单就是useradd了,接下来就来详细了解账号管理的相关信息. 用户信息 先 ...
- 一起来学习linux创建用户useradd命令
linux创建用户useradd命令 原文地址:linux创建用户useradd命令 http://www.xfcodes.com/linuxcmd/user/24308.htm 一,adduser与 ...
- Linux 创建自定义命令
Linux 创建自定义命令 Linux 可以创建自定义使用命令 这里我们采取使用“alias”命令.这里我们首先了解两个文件,通过这两个文件我们可以根据环境配置相应的自定义命令. 该文件内创建的自定义 ...
- linux创建定时任务,定时执行sql
终于弄清楚一个问题了.linux创建定时任务,定时执行sql,其中分为两个case. case-1 sql语句较少,因此直接在 shell脚本中 写sql语句.如下: [oracle@Oracle11 ...
- Windows和Linux创建软链接和硬链接
1.Wondows创建软链接和硬链接 mklink [/d] [/h] link target /d--创建目录软链接:默认为文件软链接:创建目录链接时必须使用该选项不然创出的软链接无效 /h--创建 ...
- linux 创建守护进程的相关知识
linux 创建守护进程的相关知识 http://www.114390.com/article/46410.htm linux 创建守护进程的相关知识,这篇文章主要介绍了linux 创建守护进程的相关 ...
- [转帖] Linux 创建一个简单的私有CA、发证、吊销证书
原创帖子地址: https://blog.csdn.net/mr_rsq/article/details/71001810 Linux 创建一个简单的私有CA.发证.吊销证书 2017年04月30 ...
随机推荐
- WPF自定义代码启动应用程序启动方式
删除app.xaml 添加App.cs类 第一种方式: class App { [STAThread] static void Main() { ...
- Ubuntu操作异常汇总
1.使用Ubuntu的apt-get安装软件时出现以下错误: Reading package lists... Done Building dependency tree... Done Packag ...
- centos 特殊权限 各种搜索命令 lsattr ,chattr,suid,sgid,sbit,file,type是否是内置命令,stat文件属性 ,whereis,locate,find,ln 内部命令和外部命令 第五节课
centos 特殊权限 各种搜索命令 lsattr ,chattr,suid,sgid,sbit,file,type是否是内置命令,stat文件属性 ,whereis,locate,find,ln ...
- linux/Mac使用du查看目录占用的磁盘大小
[1]du命令用来查看目录或文件所占用磁盘空间的大小.常用选项组合为: du -sh [2]若要查看一个目录下每个文件和文件夹的磁盘占用空间,使用如下命令: du -ah --max-depth=1 ...
- 运行HBase应用开发程序产生异常,提示信息包含org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory的解决办法
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties Exception in thread ...
- Django-models进阶
Django-models进阶 extra extra(select=None, where=None, params=None, tables=None, order_by=None, select ...
- NodeJS学习笔记六
Symbol简介 ES6引入了一种新的原始数据类型Symbol,表示独一无二的值.它是JavaScript语言的第七种数据类型,前六种是:Undefined.Null.布尔值(Boolean).字符串 ...
- F题:等差区间(RMQ||线段树)
原题大意:原题链接 题解链接 给定一个长为n的数组元素和q次区间[l,r]询问,判断区间[l,r]内元素排序后能否构成等差数列 #include<cmath> #include<c ...
- Lyft Level 5 Challenge 2018 - Elimination Round
A. King Escape 签. #include <bits/stdc++.h> using namespace std; ], y[]; int f1(int X, int Y) { ...
- 2018 Multi-University Training Contest 2 Solution
A - Absolute 留坑. B - Counting Permutations 留坑. C - Cover 留坑. D - Game puts("Yes") #include ...