所以,我可以让我的程序运行所有,但如果我已经给出了
$ ./a.out -f Text.txt
我只是不确定如何让程序建立-f表示文件的连接。这样做的逻辑是什么?
答案 0 :(得分:2)
main
函数具有签名int main(int argc, char**argv)
;所以你可以使用argc
(这是积极的)& argv
个论点。 argv
数组保证包含argc+1
个元素。最后一个始终是NULL
。其他是非零,无别名的零字节终止字符串。请注意,在shell启动程序之前,通常有globbing execve(2)个参数为glob(7):请参阅globbing。
例如,如果您键入(在Linux终端中)myprog -i a*.c -o foo.txt
,并且当您键入时,shell已将(execve(2))a*.c
扩展为a1.c
}和a2.c
(因为这些是唯一名称以a
开头并且当前目录中带有.c
后缀的文件),您的myprog
可执行文件main
用
argc==6
argv[0]
包含"myprog"
(因此您可以测试strcmp(argv[0],"myprog") == 0
)argv[1]
包含"-i"
argv[2]
包含"a1.c"
argv[3]
包含"a2.c"
argv[4]
包含"-o"
argv[5]
包含"foo.txt"
argv[6]
是NULL
指针此外,保证(由内核执行aliasing),所有6个argv
指针都是不同的,非several ways和非重叠。
GNU libc为您提供getopt来解析这些参数:argp& getopt。 getopt_long(3)在POSIX中标准化(但GNU也为您提供了非常有用的GNU conventions)
我强烈建议您关注autocompletion:至少接受--help
和--version
例如-f
用于某些选项而不是文件名通常是常规的(但请参见在程序参数中使用--
)。如果你真的想要一个名为-f
的文件(这是一个非常糟糕的主意),请使用./-f
有几个炮弹{{3}}。您需要为此配置它们(您甚至可以为自己的程序配置它们)。