[OI] 交互 | pipe
1.[OI] 树上背包问题2.[OI] 图论3.[OI] 关于最小环和负权环4.[OI] 分层图最短路5.[OI] 关于Eratosthenes筛法的优化思路6.[OI] DP7.[OI] 线段树8.[OI] 扫描线9.[OI] KMP10.[OI] 二分图11.[OI] 平衡树12.[OI] pb_ds13.[OI] Kruskal 重构树14.[OI] 模拟退火15.[OI] 可持久化数据结构16.[OI] Testlib
17.[OI] 交互 | pipe
18.[OI] 二项式期望 DP19.[OI] 整体二分20.[OI] 结构体引用类型转换21.[OI] 猫树22.[OI] 树链剖分23.Borůvka 算法24.线段树分治25.C++ 编译静态链接 (-static)关于如何在本地实现交互
管道
Linux 内置了一种管道操作,可以方便地把
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
管道,而这个管道现在并没有东西,会阻塞程序运行 - 需要开两个线程来运行,因为你在一个终端里是不能同时跑两个指令的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!