如何切换linux的标准输入?
PHP中文网
PHP中文网 2017-04-17 13:15:07
[Linux讨论组]

比如linux在运行中,我想stdin一会是串口,一会是键盘。。。

求解。谢谢啦!

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
伊谢尔伦

input.txt作为标准输入: freopen("input.txt", "r", stdin);
串口0作为标准输入: freopen("/dev/ttyS0", "r", stdin); (不确定串口0是不是对应ttyS0)
键盘作为标准输入: freopen("/dev/tty", "r", stdin);

怪我咯
  1. oldstdin = dup(stdin) ,然后 pipe(fd) 建个管道
  2. dup2(fd[0], stdin)把stdin重定向到管道的读端
  3. 然后两个线程 一个监控oldstdin 如果有键盘输入什么的 fgets(oldstdin), 把得到的数据write到管道的写端
    另一个线程就是 想往stdin里面写点什么 就直接往管道的写端直接 write(fd[1] ...)

这样相当于给stdin延伸出一段缓冲出来,缓冲能接受多方输入,一方就是原来的标准输入,其他的可以你自己随意定义了。

我朋友是这么做的,已经过验证。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号