是否有可能使用以下命令使用 *.txt 文件作为某些内容的输入 -
a.out<input.txt
然后使用用户的正常输入?
最佳答案
一种选择是使用:
$ ./a.out input.txt # No shell I/O redirection
然后,您打开(每个)命令行参数进行读取、读取并关闭它。完成后,您可以从 stdin
读取数据,直到 EOF。
在类 Unix 系统上,您还可以支持:
$ ./a.out < input.txt # Shell I/O redirection
从标准输入读取到 EOF,然后执行以下操作之一从键盘读取:
- 打开
/dev/tty
并从中读取。 - 打开
/dev/tty
并将其复制到stdin
(freopen()
)。
也有一些不太符合犹太教规的可能性;一种是使用标准输出或标准错误文件描述符作为输入文件描述符,使用fdopen()
。如果流连接到终端,这通常会起作用。启动 shell 的经典方法是打开/dev/tty 进行读写,然后将读/写描述符复制到标准输入、输出和错误。如果输出通过管道传输到另一个程序,或重定向到一个文件,当然这是行不通的。您可以使用 istty() 来检查文件描述符是否与终端关联。
可能还有其他方法可以做到这一点 - 如果您使用的是 Windows,则可以采用不同的方法。
就我个人而言,我会选择“将命令行参数读取为文件,然后读取标准输入”选项,但是 YMMV。
关于c - 从文件输入(使用命令行),然后正常的 stdin 键盘输入 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53573795/