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 ...
随机推荐
- 比特币 BTC本地测试节点
BTC本地测试节点 #环境 ubuntu 16.4 #客户端安装 #下载页面 #https://bitcoin.org/zh_CN/download cd /opt/ wget https://bit ...
- hive引入jar包--HIVE.AUX.JARS.PATH和hive.aux.jars.path
hive需要引入包时?该怎么引入? 一.hive-site.xml中的hive.aux.jars.path 此配置项对于hive server有效,但是是不会作用到hive shell.也就是说即使你 ...
- linux彻底删除nginx
卸载 删除 nginx 1.删除nginx,–purge包括配置文件 sudo apt-get --purge remove nginx 1 2.自动移除全部不使用的软件包 sudo apt-get ...
- Java char 和 String 的区别: 字符编码及其存储
一. ASCII码 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定.这被称为ASCII码,一直沿用至今.一个字节(8bit)一共 可以用来表示256种不同的状态 ...
- AOP切点表达式
Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式 execu ...
- vue基础篇(一)
1.简介 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手 ...
- 后台管理系统-使用AdminLTE搭建前端
返回总目录<ABP项目实战-后台管理系统-目录> 安装AdminLte 我们通过Nuget包管理器安装AdminLte 引用三方组件 因为AdminLte使用到了很多三方的组件,所以我们需 ...
- 3.3 Templates -- Conditionals(条件语句)
有时候你可能仅仅想展现模板的一部分,如果属性存在的话. 1. 我们可以使用{{if}}去有条件的渲染一块: {{#if person}} Welcome back, <b>{{person ...
- fatal error C1010: unexpected end of file while looking for precompiled header directive
在编译VS时候,出现fatal error C1010: unexpected end of file while looking for precompiled head. 问题详细解释:致命错误C ...
- Thymeleaf使用说明
Thymeleaf使用说明 javascript操作: a.<script type="text/javascript" th:inline="javascript ...