[OI] 交互 | pipe
关于如何在本地实现交互
管道
Linux 内置了一种管道操作,可以方便地把 \(A\) 程序的输出和 \(B\) 程序的输入连接起来,只需要以下指令:
A | B
此代码行的意思是:同时运行 \(A\) 和 \(B\),以及把 \(A\) 程序的输出和 \(B\) 程序的输入连接起来
实测
现有两个程序 a.cpp 与 b.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的更多相关文章
- python的进程间的数据交互
#先来看下如何实现多进程 # multiprocessing 这个是python的多进程的模块,我们会用到这个模块的很多方法 from multiprocessing import Process i ...
- 深入理解python多进程编程
1.python多进程编程背景 python中的多进程最大的好处就是充分利用多核cpu的资源,不像python中的多线程,受制于GIL的限制,从而只能进行cpu分配,在python的多进程中,适合于所 ...
- Mac 开发工具信息的备份
相信大部分程序员都对开发环境的工具都有一些特殊的执念(???),如果在自己不习惯的环境中工作完全无法开展,怎么这个工具没有那个字体难受,我本人就是,换了新的 Mac 电脑后如何快速恢复到之前的开发工具 ...
- Python 3 利用 subprocess 实现管道( pipe )交互操作读/写通信
这里我们用Windows下的shell来举例: from subprocess import * #因为是举例,就全部导入了 为了方便你理解,我们用一个很简单的一段代码来说明: 可以看见我们利用Pop ...
- 深入浅出 Redis client/server交互流程
综述 最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文章都断断续续的非系统性的,不能给读者此交互流程的整体把握.所以这里我 ...
- python调用外部子进程,通过管道实现异步标准输入和输出的交互
我们通常会遇到这样的需求:通过C++或其他较底层的语言实现了一个复杂的功能模块,需要搭建一个基于Web的Demo,方法查询数据.由于Python语言的强大和简洁,其用来搭建Demo非常合适,Flask ...
- TestStand与LabVIEW UI 交互
交互起因 客户觉得TestStand界面复杂,希望一个简单的界面即可进行序列执行,采用LabVIEW调用TestStand引擎可实现快速设计,将TestStand拆解到LabVIEW.然而,这样做需要 ...
- Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)
OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目 ...
- ZeroMQ(java)中组件间数据传输(Pipe的实现)
在ZeroMQ(java)中,整个IO的处理流程都是分层来进行的,当然处于最下端的肯定是前面介绍过的poller以及StreamEngin了....涉及到上层的话就还有session,以及socket ...
- 从tcp原理角度理解Broken pipe和Connection reset by peer的区别
从tcp原理角度理解Broken pipe和Connection reset by peer的区别 http://lovestblog.cn/blog/2014/05/20/tcp-broken-pi ...
随机推荐
- C# 算术表达式求值(后缀法),看这一篇就够了
一.种类介绍 算术表达式有三种:前缀表达式.中缀表达式和后缀表达式.一般用的是中缀,比如1+1,前后缀就是把操作符移到前面和后面,下面简单介绍一下这三种表达式. 1.前缀表示法 前缀表示法又叫波兰表示 ...
- Windows下搭建Vue脚手架CLI
Vue CLI的使用依赖Node.js,先按照Node.js环境. //安装环境C:\Users\16779>npm install --global vue-cli npm WARN depr ...
- BI 工具助力企业解锁数字化工厂,开启工业智能新视界
背景 在 2022 年公布的<"十四五"数字经济发展规划>中,政府不断增加对制造业数字化转型的政策支持力度,积极倡导制造企业采用最新技术,提升自动化.数字化和智能化水平 ...
- MyBatisPlus公共字段自动填充
公共字段自动填充 公共字段 新增员工,修改.编辑员工信息时,都需要设置创建时间,修改时间等操作,这些操作过于重复.繁琐,为了有更快捷高效的,MyBatisPlus提供了公共字段自动填充功能,当我们执行 ...
- 【转载】逐际动力双足机器人P1在深圳塘朗山零样本、无保护、全开放完成测试
原文: https://weibo.com/1255595687/O5k4Aj8l2 [逐际动力双足机器人P1在深圳塘朗山零样本.无保护.全开放完成测试] 上周,就在全球AI界被美国初创公司Figur ...
- pytorch报错:Variable._execution_engine.run_backward( # Calls into the C++ engine to run the backward pass RuntimeError: FIND was unable to find an engine to execute this computatio
GPU模式下运行pytorch代码报错,pytorch为2.2.1,NVIDIA驱动版本535.161.07 File "/home/devil/anaconda3/envs/sample- ...
- python语言:将多张图片压成一段视频——利用opencv-python库实现
相关代码例子参见: All_finished_Demo.py ========================================= 这里将的功能就是用python语言实现将多张照片压成一 ...
- 键盘中上、下、左、右四个光标键所对应的ASCII码值为多少
首先给出ASCII码值表: 上.下.左.右这四个光标键对应的ASCII码值不是一个值而是三个,准确的说光标键的ASCII码值是一个组合. 每个方向键所对应的三个键值为:0x1b + 0x5b + n ...
- 【安装】SQL SERVER 彻底卸载清除
-----2024年8月6日09:40:13 -----bayaim, 以下内容纯属百度网络搜到,如有侵权请联系及时删除 SQL SERVER 如果卸载不干净,就会导致下一次安装失败,下面是卸载的步 ...
- 安装RabbitMQ遇到的一些坑
Ubantu18.0正确安装RabbitMQ 1.安装erlang 因为RabbitMQ需要erlang语言的支持,所以我们需要先安装erlang. sudo apt-get install erla ...