c语言 - 使用 execl 调用带有参数"ps"命令有意外行为



我编写了一个使用execl函数的简单C程序。运行此程序后,我期望看到的是ps -U myusername的输出。

如果在终端中写入ps -U myusername,我得到了想要的结果。

如果调用execl("/bin/ps", "/bin/ps", "-U myusername", NULL),我会得到以下错误消息error: improper list

然而,如果我从-U myusername中移除空间,并以以下方式调用函数:execl("/bin/ps", "/bin/ps", "-Umyusername", NULL),我会得到正确的结果。

为什么会发生这种情况,我如何实现预期的行为(这只是一个简单的例子;我真正想要的是让用户输入命令,并将其拆分为命令和参数,最后调用类似execlp("command", "command", "arguments", NULL)的东西。)?

它是一个变差函数。就这样称呼它吧:

execlp("command", "command", "first arg", "second arg" /*, etc*/, NULL);

或者在您的情况下是

execlp("/bin/ps", "/bin/ps", "-U", "username", NULL);

NULL对函数说:"没关系,没有更多的参数了。"如果你忘记了,就会有一个未定义的行为。

更进一步:http://manpagesfr.free.fr/man/man3/stdarg.3.html

线路execlp("/bin/ps", "/bin/ps", "-Uusername", NULL);工作是因为ps -Uusernameps -U username相同。只要在控制台中键入它,它就会证明这一事实;)

execlp("/bin/ps", "/bin/ps", "-U username", NULL);不起作用,因为它就像在shell中键入ps '-U username'一样。'-U username'是一个单独的自变量,它不是ps 的有效自变量

相关内容

  • 没有找到相关文章

最新更新