带有'<'和'- option'的命令行 C



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

下面的意思是什么?我明白了——a是execuble测试的一个选项。测试-a<test.txt

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

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

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

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

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

<edit>我添加了这个作为评论,但我认为它应该出现在答案中:

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

我想澄清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读取您的输入,并在您想将文件的内容用作stdin时使用< test.txt重定向文件。通过这种方式,您可以允许程序从文件中读取输入或接收用户输入,从而提供更大的灵活性。

"<test.txt"表示test.txt的内容作为参数传递。如果将"<"替换为">",则会将程序的输出重定向到test.txt。

我不认为有什么特殊的方法可以检测"-"。遍历参数并检查第一个字符是否为"-">

最新更新