C++ 如何查看是否有数据通过管道符传送到程序呢?

发布于 2022-09-12 04:13:25 字数 404 浏览 19 评论 0

我想在 windows 下写一个类似 head 命令的程序,让它有以下两种用法:

  1. head 1.txt :输出 1.txt 前 10 行
  2. cat 1.txt | head :输出 1.txt 前10行

我发现第二种方式是通过 stdin 传递数据的,但是现在的问题是 我如何才能知道数据的来源是文件还是 stdin 呢?

使用参数名决定数据来源的话就会导致 cat 1.txt | head 这种方式不可用。
而如果使用子线程的话,子线程似乎并没有办法读取到主线程的 stdin。

而在主线程调用 cin 的话又会导致主线程被阻塞。而且 (bool)cin 也只有在读取到数据之后才有用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凉墨 2022-09-19 04:13:25

使用参数名决定数据来源的话就会导致 cat 1.txt | head 这种方式不可用。

head 就是用参数名决定来源的。

当没有文件名,或者文件名是 - 的时候,用 stdin

骑趴 2022-09-19 04:13:25

感谢回答

我在撰写这个问题的时候让程序在没有参数的时候自动退出了,这才导致 cat 1.txt | head 这种方式不可用。主要原因如果不这样写的话直接调用 head 会导致程序被阻塞。

我刚才又试了一下 Linux 上的 head 命令,发现它也会有这个问题。那样的话我的程序应该是写的没问题。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文