c++ - Ubuntu 中的 execl() 参数

标签 c++ c linux ubuntu exec

我正在学习 linux 编程,遇到了 exec 函数,它非常有用。但问题是 exec 函数参数非常困惑,我无法理解哪个参数用于什么目的。在下面的代码中,execl() 函数是从通过 fork 创建的子对象调用的()execl()中最后一个参数(NULL)的作用是什么?

execl("/bin/ls","ls","-l",NULL);

如果有人能解释NULL 参数和其他参数的目的是什么以及exec() 系列函数参数的目的,那将是一个很大的帮助给我!

最佳答案

创建未定义的行为。这不是对 execl 的合法调用。一个 正确的调用可能是:

execl( "/bin/ls", "ls", "-l", (char*)0 );

最后一个参数必须(char*)0,否则你有未定义的行为。 第一个参数是可执行文件的路径。以下 参数出现在执行程序的 argv 中。这些 list 参数由 (char*)0 终止;这就是被调用函数的方式 知道已经到达最后一个参数。在上面的例子中, 例如,"/bin/ls" 中的可执行文件将替换您的代码;在 它的 mainargc 等于 2,argv[0] 等于 "ls", 和 argv[1] 等于 "-l"

紧接着这个函数,你应该有错误处理 代码。 (execl 总是返回 -1,当它返回时,所以你不需要 测试它。它只会在出现某种错误时返回。)

关于c++ - Ubuntu 中的 execl() 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12677120/

相关文章:

c++ - Clang的不同处理阶段

python - celery worker raise sock setsockopt TCP_SYNCNT [Errno 22] 参数无效

php - Linux 内核 2.6.18-128.1.10.el5 中 grep 的默认绝对路径

c++ - 在 vector<vector<T>> 的初始化中合并 vector 和 initializer_list?

c++ - 在 libarchive 中设置 UTF-8 路径名 header

c - 带有缩进的正确 C 函数格式

linux - 当我 ssh 连接到 vagrant centos 6 时,我收到警告 setlocale LC_CTYPE

c++ - 为什么这样做:从 std::string 函数返回 C 字符串文字并调用 c_str()

c++ - 无法从 'unsigned int' 转换为 'unsigned int&'

c - 被误解的代码示例