gpt4 book ai didi

使用 execl 调用带有参数的 "ps"命令具有意外行为

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:21 25 4
gpt4 key购买 nike

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

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

如果调用 execl("/bin/ps", "/bin/ps", "-U myusername", NULL) 我收到以下错误消息 错误:不正确的列表.

但是,如果我从 -U myusername 中删除空格,并按以下方式调用该函数:execl("/bin/ps", "/bin/ps", "-Umyusername", NULL),我得到了正确的结果。

为什么会这样,我怎样才能实现预期的行为(这只是一个简单的例子;我真正想要的是让用户输入命令并将其拆分为命令和参数,最后调用类似 execlp("命令", "命令", "参数", 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 -Uusername 是与 ps -U 用户名 相同。只需在控制台中输入它,它就会证明这一点;)

execlp("/bin/ps", "/bin/ps", "-U username", NULL); 不起作用,因为它就像您键入 ps '-U 用户名' 在你的 shell 中。 '-U username' 是单个参数,不是 ps

的有效参数

关于使用 execl 调用带有参数的 "ps"命令具有意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36740348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com