命令行C带'<'和' - 选项'

时间:2014-02-16 22:10:41

标签: c command-line-arguments

关于C中命令行内容的一个简单问题。

以下是什么意思?我明白了 - 一个可执行测试的选项。 test-a<的test.txt

但是什么'< test.txt'是什么意思?

另外,如果你们能帮助我理解一个简单的程序将如何选择 '-a,-b,-c'是三种不同的选择,这将是有帮助的。在我的脑海中,似乎这样做的方法就是检查该参数是否有2个字符,它只是一个' - '后跟一个有效选项的字母,但有没有特殊的方法来做到这一点?就像在C中有什么东西可以自动识别' - '后跟一个字母作为选项吗?

3 个答案:

答案 0 :(得分:1)

在C中它并不意味着什么特别的,只是一个“<”在命令行上。

在许多操作系统中,它意味着重定向文件test.txt中的标准输入。即而不是来自终端的stdin,它来自命名文件。

要处理命令行解析,请查看getopt

<编辑>我将此添加为评论,但我认为它应该在答案中:

如果您输入app -a -b < xxx,则调用您的应用程序的shell会解释该行的< xxx部分,而< xxx将不会出现在args数组中(argv)传递给你的申请。你没有(简单的)方法知道重定向已经发生。

答案 1 :(得分:1)

我想澄清John3136和enedil到目前为止所说的内容。我希望你接受其中一个答案。

shell(例如bash)是负责处理您键入的命令并执行适当程序的程序。代码段< test.txt是一个特殊指令,指示shell使程序从文件中读取输入(在本例中为text.txt)。正如enedil指出的那样,非指令的单词将作为参数通过变量argv传递给C程序。

编辑。有两种方法可以将文件传递给程序。

在运行时提供文件的路径作为参数。然后,您可以调用fopen打开指定的文件:

if (argc == 1) {
    fprintf("No filename provided!");
    exit(EXIT_FAILURE);
}
FILE* f = fopen(argv[1], "r");
/* Do stuff with f here */

另一种选择是只读取C程序中stdin的输入,并在想要将文件内容用作< test.txt时使用stdin重定向文件。这样,您可以通过允许程序从文件读取输入或接收用户输入来提供更大的灵活性。

答案 2 :(得分:-1)

“&lt; test.txt”表示test.txt的内容作为参数传递。 如果“&lt;”被“&gt;”取代它会将程序的输出重定向到test.txt。

我认为没有一种特殊的方法来检测“ - ”。迭代参数并检查第一个字符是否为“ - ”