c - 从文件输入(使用命令行),然后正常的 stdin 键盘输入 (C)

标签 c

是否有可能使用以下命令使用 *.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/

相关文章:

c++ - 使用 apr_shm 库指向结构体中的指针

c - 两个 float 的除法给出了错误的答案

c - 解密时在 AES_encrypt 函数中指定输入字符串长度

c - 检查字符数组是否为空的最佳方法

c++ - 整数数组的位封装

C 比较 'x < 0' 其中 'x' 的类型是任意的,即可能是无符号的

C:将字符串读入动态数组

c - 为什么使用存储类说明符来确定两个独立的属性?

c - 使用 Virtualbox 在主机和 guest 之间建立串行端口连接

递归可以命名为简单的函数调用吗?