C 输入文件来自命令行

C++ Input File from command line

本文关键字:命令行 文件 输入      更新时间:2023-10-16

所以我有一个项目,需要我做类似的事情:

./test < input.txt

,但不是一直。该程序也可以运行为:

./test

在两者之间有一些不同的代码。我很难区分代码中的两者。例如,两者的argc值为1。

确定命令行中是否有输入文件的最佳方法是什么?

没有一般方法,它是操作系统特定的。我专注于Linux和Posix系统。请注意,test是一个糟糕的名称(与测试(1)...相撞,mytest < input.txt静止器从Stdin获取输入,因为在使用Execve(2)启动mytest程序之前,Shell重定向是由Shell完成的。

。 。

从文件中读取的通常方法是将其作为显式参数:mytest input.txt(然后测试argc)。我强烈建议您有这样的惯例。另请参见Getopt(3),请阅读有关程序参数。

在Linux(或Posix)上,您可以在STDIN_FILENO(即0)上使用FSTAT(2)和/或ISATTY(3),即使不是Bullet证明,例如用于管道或此处的文档。

您甚至可能要考虑批处理调用的情况(即atcrontab作业)和后台作业。为此,您也可以检查环境,请参阅环境(7)。还要在控制终端和会话(SetSID(2))和工作控制方面阅读凭据(7)。另请参见/dev/tty(SO Termios(3),TTY(4)和TTY Demysified)。顺便说一句,您也可以关心 stdout stderr at(或不)重定向。

我建议能够通过明确的程序参数克服这样的自动调整,因为它不会是完美的,因为有角落案例(mytest < /dev/stdinmytest < /dev/tty呢?您认为这些是要检测到的重定向吗?)。关于程序论点有惯例和习惯。

很少有程序进行这种自动检测,而那些程序则提供了一种通过程序参数来克服它的方法(例如,ls --coloremacs -nw)。

<运算符用于输入重定向。这只是意味着<之后指定的文件替换了该程序的stdin

您没有替换stdin的另一种方法,因此从。

中读取普通的stdin文件。

在这两种情况下,您仍在从stdin阅读,,因此不用担心,因此您可能需要仔细检查实际要求是什么。