我正在尝试在Unix环境中运行C程序,我也有一个输入文件。老师说我们可以通过输入
来运行它gcc programName ./a.out inputFile
或
gcc programName ./a.out inputFile > viewFile
我的问题是:如何在C程序中处理?比如,输入文件是作为main
的参数添加的(或者像它的名字之类的东西),还是表现得像是从system.in
或其他东西读取?
我收到一条消息,说打开输入文件时出错,我有int main(int argc, char* argv[])
。如果有人能够解释发生了什么以及如何处理输入文件,我真的很感激。
答案 0 :(得分:2)
你的教授提到了两种调用文件的方法:
./a.out inputFile
./a.out inputFile > viewFile
对于这两种形式:
argc
将是2
。argv[0]
将是表示程序名称的字符串argv[1]
将是"inputFile"
。 POSIX shell解释> filename
意味着将程序的输出(特别是stdout)重定向到给定的文件名。
从程序的角度来看,命令重定向不出现在参数列表中(尽管通常有系统特定的方法来查找原始命令行)。
答案 1 :(得分:0)
首先,gcc programName.c
是一个单独的命令。
./a.out inputFile
使用main
和argc = 2
调用您的argv = { "./a.out", "inputFile", NULL }
功能。 (shell将命令行拆分为单词,然后将第一个单词视为程序名称,并使用所有参数调用它。)
./a.out inputFile > viewFile
将相同的参数传递给main
,如上例所示。区别在于> viewFile
指示shell在运行程序之前打开(和clobber / create)viewFile
文件并将stdout
重定向到它。换句话说,您的计划只会将./a.out
和inputFile
视为参数,但写入stdout
的所有内容都会以viewFile
结尾。