DuplexPipe二三事(一)——有趣的起因:算24
写 DuplexPipe 是因为“无聊”!真的,那天很无聊,想起小时候用扑克牌和姐姐比赛算24,就随手写了一个 Shell 脚本重温一下:
#!/bin/sh for ((i=0;i<4;i++)) do ((n=$RANDOM%10+1)) echo -n "$n " done echo i=0 while read exp do ((i++)) ((value=$exp)) if [[ $value -ne 24 ]] then echo -n "Wrong! " echo "$exp=$value" echo "try again!" else echo "OK!" echo "Total use ${i}s" break fi done
最近好像养成一个习惯:能让计算机做则尽量不自己做。才玩了几盘,就开始动歪脑筋要写一个求24的程序来自动计算。方法就是最简单的穷举,下面是一个最初的简陋版本(有兴趣的朋友可以在此再添加五种括号):
#!/bin/sh s[0]='+' s[1]='-' s[2]='*' s[3]='/' read a b c d for ((i=0;i<64;i++)) do ((k=i%4)) x=${s[$k]} ((k=i/4%4)) y=${s[$k]} ((k=i/16)) z=${s[$k]} e="$a$x$b$y$c$z$d" r=`echo $e | bc -l | sed -e 's//.0/+$//'` if [[ "$r" == "24" ]] then echo "$e=$r" fi done
既然能让计算机自动计算结果,那我先运行程序1,显示4个随机数;运行程序2,输入程序1生成的4个数字,获得结果后再反馈给程序1。但转念一想:我这样手工进行输入输出的工作,不是比算24本身更枯燥、单调?而且是重复的劳动!理所当然应该由计算机自动完成。
为完成这个任务,计算机要做的就是让“程序1”和“程序2”进行聊天:“程序1”的输出作为“程序2”的输入、“程序2”的输出作为“程序1”的输入。这一定义会让人立刻联想到“管道”(exe1 | exe2),但遗憾的是“管道”是单向的——只能满足“程序1”的输出作为“程序2”的输入。
其实这就是一个“进程通信”(IPC)的问题,如果你熟悉 UNIX 的历史,也会和我一样联想到 Socket 。我随即想起了网络瑞士军刀——nc(netcat),并用它顺利解决了这个问题!我会在《DuplexPipe二三事(二)》中介绍这个方法。
版权声明
请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“redraiment”和主站点地址,方便其他朋友提问和指正。
联系方式
我的邮箱,欢迎来信(redraiment@gmail.com)
我的Blogger(子清行):http://redraiment.blogspot.com/
我的Google Sites(子清行):https://sites.google.com/site/redraiment
我的CSDN博客(梦婷轩):http://blog.csdn.net/redraiment
我的百度空间(梦婷轩):http://hi.baidu.com/redraiment
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的