C 输入文件来自命令行
C++ Input File from command line
所以我有一个项目,需要我做类似的事情:
./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证明,例如用于管道或此处的文档。
您甚至可能要考虑批处理调用的情况(即at
或crontab
作业)和后台作业。为此,您也可以检查环境,请参阅环境(7)。还要在控制终端和会话(SetSID(2))和工作控制方面阅读凭据(7)。另请参见/dev/tty
(SO Termios(3),TTY(4)和TTY Demysified)。顺便说一句,您也可以关心 stdout 或 stderr at(或不)重定向。
我建议能够通过明确的程序参数克服这样的自动调整,因为它不会是完美的,因为有角落案例(mytest < /dev/stdin
和mytest < /dev/tty
呢?您认为这些是要检测到的重定向吗?)。关于程序论点有惯例和习惯。
很少有程序进行这种自动检测,而那些程序则提供了一种通过程序参数来克服它的方法(例如,ls --color
和emacs -nw
)。
<
运算符用于输入重定向。这只是意味着<
之后指定的文件替换了该程序的stdin
。
您没有替换stdin的另一种方法,因此从。
中读取普通的stdin文件。在这两种情况下,您仍在从stdin阅读,,因此不用担心,因此您可能需要仔细检查实际要求是什么。
- 通过命令行在Visual Studio中编译单个独立文件
- 是否可以在命令行中将输入参数传递给可执行文件
- 如何从命令行使用 cmake 为有根的安卓设备制作可执行文件?
- 使用 MinGW 在 Windows 上的命令行编译C++文件
- 程序运行,但文件无法打开.C++中的命令行
- 选择特定版本的 Visual Studio 命令行工具包,并根据特定版本的C++运行时环境编译文件
- 编写一个将 LLVM IR 文件作为命令行参数的程序
- 通过命令行参数获取llvm ir文件时面临问题
- 如果在命令行c++中给出了一个文件,那么如何读取该文件
- 如何在 Boost Program_Options 中使用命令行和分层配置文件的选项
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- 如何处理错误"E1696命令行错误:无法在Visual Studio 2017中打开元数据文件"mscorlib.dll"?
- 如何在窗口上的命令行中读取输入 .in 文件
- C++使用命令行输入 txt 文件,但打开文件失败
- Intel-Pin:如何将命令行论证传递给二进制文件
- boost::P rogram_options 一种判断值是从命令行还是 ini 文件的方法?
- 使用命令行参数从TXT文件中提取并在C 中运行特定类
- 试图从命令行打开文件
- C 使用多个功能中从命令行传递的文件
- 使用命令行打开文件