当前位置:  开发笔记 > 编程语言 > 正文

unistd的execl()没有传递任何参数?

如何解决《unistd的execl()没有传递任何参数?》经验,为你挑选了1个好方法。

在我的代码中,我需要执行/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=]

这样做的正确方法是什么,我不理解某事,或者我是否使用完全错误的函数调用?



1> interjay..:

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

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

这基本上是在shell中运行没有参数的程序时发生的情况.

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


惯例是第一个arg是运行时的完整路径,而不仅仅是文件名.但是你在你的例子中说得对.
推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有