gpt4 book ai didi

c++ - 只允许将一个文件重定向到标准输入

转载 作者:行者123 更新时间:2023-11-30 01:40:56 30 4
gpt4 key购买 nike

我目前正在编写一个 C++ 程序,用法是:

[prog]  - - - - - - - - - - - - read from stdin
[prog] [filename] - - - - - - will test and open file
[prog] < [filename] - - - - - will redirect the filename to stdin

我已经编写了代码来捕获太多参数,并且一切正常,除了如果用户尝试

[prog] < [filename] [filename]

它将打开第二个文件名。

如何防止这种情况发生。感谢您的考虑。

最佳答案

进程无法通过查看任何内容来权威地断定 shell 是否显式地将进程的标准输入从默认值重定向。

但是在 POSIX 平台上运行时,进程可以做出非常有根据的猜测,其中 isatty()返回给定文件描述符是否附加到交互式终端的指示。所以,你可以检查 isatty(0) (standard input file descriptor #0);如果是这样,这意味着进程的标准输入仍然附加到交互式键盘输入,并且没有被重定向。

这并非 100% 万无一失。仍然可以通过精心设计的歌舞例程,并使用伪 tty 设备将管道连接到进程的标准输入,这与交互式终端没有区别,但输入确实来自其他一些source,但这非常罕见,对于典型的普通应用程序,isatty() 应该足够了。因此,您的 main() 可以检查 isatty(0),如果是这样,则表明输入没有被重定向。

但是请注意,如果 isatty(0) 不是 true,标准输入可能会被重定向,但是需要额外的侦查来确定它是一个管道,还是一个普通文件,或者也许是别的东西。

因此,您的总体计划是:检查您的 argv 是否指定了文件名。如果是这样,如果 isatty(0),那么您有两个可能的输入文件需要处理。

关于c++ - 只允许将一个文件重定向到标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42382259/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com