当进程从另一个进程启动时,为什么getopt()得不到第一个参数?

时间:2015-05-21 13:41:14

标签: c windows

当我使用CreateProcess从另一个进程启动进程时,我无法获得使用getopt()时提供的第一个参数。

1 个答案:

答案 0 :(得分:0)

刚刚发现了它。 getopt()将第一个命令解析为应用程序名称。当使用CreateProcess()从另一个进程启动进程时,子进程中收到的第一个参数不是应用程序名称,而是给它的第一个命令。 来自终端的普通案例: .app arg1 arg2。在这种情况下,argv [0]是app,argv [1]是arg1 ....

从使用CreateProcess()的进程开始: 应用程序名称和参数分别提供给函数CreateProcess()。 假设参数字符串是“arg1 arg2”,尝试访问argv [0]会给出除应用程序名称之外的arg1。在使用getopt()解析选项后,尝试获取第一个参数(argv [optind]),我们得到了arg2。这指出getopt()忽略了第一个参数,因为它通常是应用程序名称。为了能够获得第一个命令,在实际参数之前添加任何愚蠢的参数。 例如参数字符串:“stupid arg1 arg2”。这样getopt()很容易认为stupid是应用程序名称。