gpt4 book ai didi

c - unistd 的 execl() 不传递任何参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:43:29 28 4
gpt4 key购买 nike

在我的代码中,我需要执行 /bin/bash,但我不想在不向它传递任何参数的情况下执行它。我写了这个:

execl("/bin/bash", NULL);

然后,通过一些研究,我意识到我还需要添加类型转换:

execl("bin/bash", (char*) NULL);

但是 GCC 仍然给我警告:

main.c:18:5: warning: null argument where non-null required (argument 2) [-Wnonnull]
if(execl("/bin/bash", (char*) NULL) == -1) {
^
main.c:18:5: warning: not enough variable arguments to fit a sentinel [-Wformat=]

这样做的正确方法是什么,我是不是误解了什么,还是我使用了完全错误的函数调用?

最佳答案

您收到警告是因为惯例是第一个参数始终与正在运行的程序的路径相同,如下所示:

execl("/bin/bash", "/bin/bash", (char*) NULL);

这基本上就是在 shell 中运行不带参数的程序时发生的情况。

这个参数将进入执行程序的 argv[0],它可以用来检查它是如何运行的。

关于c - unistd 的 execl() 不传递任何参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34400521/

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