关于如何在本地实现交互

管道

Linux 内置了一种管道操作,可以方便地把 \(A\) 程序的输出和 \(B\) 程序的输入连接起来,只需要以下指令:

A | B

此代码行的意思是:同时运行 \(A\) 和 \(B\),以及把 \(A\) 程序的输出和 \(B\) 程序的输入连接起来

实测

现有两个程序 a.cppb.cpp 如下:

a.cpp

#include<bits/stdc++.h>
using namespace std;
int main(){
int a;
while(cin>>a){
cout<<a;
}
}

b.cpp

include<bits/stdc++.h>
using namespace std;
int main(){
int b=0;
for(int i=1;i<=10;++i){
cout<<b++;
}
}

在终端执行的指令如下:

@stu:~$ vim b.cpp
@stu:~$ vim a.cpp
@stu:~$ g++ b.cpp -o b
@stu:~$ g++ a.cpp -o a
@stu:~$ ./b | ./a

特别声明:我真的不用 vim,但是 vim 用来干这种事情挺方便的

可以发现输出为 123456789,说明连接是成功的

文件管道

文件管道用于应对双侧交互的情况

具体地,使用如下命令可以创建一个新的文件管道

mkfifo name

创建好一个文件管道后,可以通过如下方式使用:

./a > name

表示输出到管道 name 中

但是管道是无法被用户读取的,只能通过运行另一个程序来读入内容:

./b < name

表示将管道 name 中的内容输入到 b 中

这样,我们就实现了和刚才 ./b | ./a 一样的功能

实际上文件管道主要是用来处理双侧交互的:

mkfifo input output
./a >input <output
./b >input <output

需要注意的有两点:

  • 这里运行是有顺序的,一定要把 > input 写在前面,不然会先打开 output 管道,而这个管道现在并没有东西,会阻塞程序运行
  • 需要开两个线程来运行,因为你在一个终端里是不能同时跑两个指令的

[OI] 交互 | pipe的更多相关文章

  1. python的进程间的数据交互

    #先来看下如何实现多进程 # multiprocessing 这个是python的多进程的模块,我们会用到这个模块的很多方法 from multiprocessing import Process i ...

  2. 深入理解python多进程编程

    1.python多进程编程背景 python中的多进程最大的好处就是充分利用多核cpu的资源,不像python中的多线程,受制于GIL的限制,从而只能进行cpu分配,在python的多进程中,适合于所 ...

  3. Mac 开发工具信息的备份

    相信大部分程序员都对开发环境的工具都有一些特殊的执念(???),如果在自己不习惯的环境中工作完全无法开展,怎么这个工具没有那个字体难受,我本人就是,换了新的 Mac 电脑后如何快速恢复到之前的开发工具 ...

  4. Python 3 利用 subprocess 实现管道( pipe )交互操作读/写通信

    这里我们用Windows下的shell来举例: from subprocess import * #因为是举例,就全部导入了 为了方便你理解,我们用一个很简单的一段代码来说明: 可以看见我们利用Pop ...

  5. 深入浅出 Redis client/server交互流程

    综述 最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文章都断断续续的非系统性的,不能给读者此交互流程的整体把握.所以这里我 ...

  6. python调用外部子进程,通过管道实现异步标准输入和输出的交互

    我们通常会遇到这样的需求:通过C++或其他较底层的语言实现了一个复杂的功能模块,需要搭建一个基于Web的Demo,方法查询数据.由于Python语言的强大和简洁,其用来搭建Demo非常合适,Flask ...

  7. TestStand与LabVIEW UI 交互

    交互起因 客户觉得TestStand界面复杂,希望一个简单的界面即可进行序列执行,采用LabVIEW调用TestStand引擎可实现快速设计,将TestStand拆解到LabVIEW.然而,这样做需要 ...

  8. Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)

    OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname")  改变当前脚本工作目 ...

  9. ZeroMQ(java)中组件间数据传输(Pipe的实现)

    在ZeroMQ(java)中,整个IO的处理流程都是分层来进行的,当然处于最下端的肯定是前面介绍过的poller以及StreamEngin了....涉及到上层的话就还有session,以及socket ...

  10. 从tcp原理角度理解Broken pipe和Connection reset by peer的区别

    从tcp原理角度理解Broken pipe和Connection reset by peer的区别 http://lovestblog.cn/blog/2014/05/20/tcp-broken-pi ...

随机推荐

  1. 顺序表之单链表(C实现)

    // Code file created by C Code Develop #include "ccd.h"#include "stdio.h"#includ ...

  2. 配置Sprig security后Post请求无法使用

    在学习过程中发现在配置完Spring security后,Post请求失效,无法增删改数据,这里可以通过在Spring Security 的Config类中增加 也可以自定义csrf,不过目前还不是很 ...

  3. sharding-jdbc 兼容 MybatisPlus的动态数据源

    背景:之前的项目做读写分离的时候用的 MybatisPlus的动态数据做的,很多地方使用的@DS直接指定的读库或者写库实现的业务:随着表数据量越来越大,现在打算把比较大的表进行水平拆分,准备使用 Sh ...

  4. 【SpringBoot】数据源加密处理

    代码审计报告提出的一个问题: 明文暴露配置信息风险 解决方案可以使用jasypt实现 需要使用依赖: <dependency> <groupId>com.github.ulis ...

  5. 【Hibernate】05 缓存与MySQL事务隔离

    Cache 什么是缓存? 数据存储到数据库,是从内存中以流的方式写进[输出]到数据库,其效率并不是很高 - 所以在内存中暂存一部分数据,可以不以流的方式读取,效率是非常高的[相对于流来说] Hiber ...

  6. 【REGX】正则表达式 选中空白行

    参考地址: https://www.cnblogs.com/peijyStudy/p/13201576.html VScode并列替换不够智能,我需要等行粘贴,结果SHIFT+ALT复制内容粘贴上去就 ...

  7. 【Vue】Vue-Cli 安装

    首先需要Node.js环境支持: Node.js官网下载: https://nodejs.org/en/ 右边稳定版,左边最新版 下载安装程序之后双击运行,无脑下一步 打开终端输入版本查看命令: no ...

  8. 【转载】 NumPy之:数据类型对象dtype

    原文地址: https://www.cnblogs.com/flydean/p/14720858.html ============================================== ...

  9. Ubuntu系统中CUDA套件nvvp启动后报错Failed to load module "canberra-gtk-module"

    最近在看cuda方面的内容,需要对cuda代码做一些性能分析,于是需要使用nvvp,但是启动nvvp后报错:Failed to load module "canberra-gtk-modul ...

  10. Illegal key size or default parameters 解决方案

    1.背景 在做aes加密时,报错 Illegal key size or default parameters...有的jdk版本报错,有的不报错,原因在于: jdk 或jre\lib\securit ...