试图在Unix上运行C程序,但对输入文件的处理方式有点困惑

时间:2016-09-17 20:57:47

标签: c shell unix input

我正在尝试在Unix环境中运行C程序,我也有一个输入文件。老师说我们可以通过输入

来运行它
gcc programName ./a.out inputFile

gcc programName ./a.out inputFile > viewFile

我的问题是:如何在C程序中处理?比如,输入文件是作为main的参数添加的(或者像它的名字之类的东西),还是表现得像是从system.in或其他东西读取?

我收到一条消息,说打开输入文件时出错,我有int main(int argc, char* argv[])。如果有人能够解释发生了什么以及如何处理输入文件,我真的很感激。

2 个答案:

答案 0 :(得分:2)

你的教授提到了两种调用文件的方法:

  1. ./a.out inputFile
  2. ./a.out inputFile > viewFile
  3. 对于这两种形式:

    • argc将是2
    • argv[0]将是表示程序名称的字符串
    • argv[1]将是"inputFile"

    POSIX shell解释> filename意味着将程序的输出(特别是stdout)重定向到给定的文件名。

    从程序的角度来看,命令重定向不出现在参数列表中(尽管通常有系统特定的方法来查找原始命令行)。

答案 1 :(得分:0)

首先,gcc programName.c是一个单独的命令。

./a.out inputFile使用mainargc = 2调用您的argv = { "./a.out", "inputFile", NULL }功能。 (shell将命令行拆分为单词,然后将第一个单词视为程序名称,并使用所有参数调用它。)

./a.out inputFile > viewFile将相同的参数传递给main,如上例所示。区别在于> viewFile指示shell在运行程序之前打开(和clobber / create)viewFile文件并将stdout重定向到它。换句话说,您的计划只会将./a.outinputFile视为参数,但写入stdout的所有内容都会以viewFile结尾。