`execl`是否需要NULL作为最后一个参数?

And*_*uel 0 c linux

我的linux(Ubuntu)的手册页,没有提到需要NULL作为最后一个参数,minix版本的手册页execl提到需要NULL作为最后一个参数.然而,我在调用时遇到了奇怪的行为modprobe,我解决了将NULL作为最后一个参数的问题.

对我有用的方式:

execl("/sbin/modprobe","modprobe","pl2303",NULL);
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

execl("/sbin/modprobe","modprobe","pl2303")
Run Code Online (Sandbox Code Playgroud)

我收到错误号14(EFAULT).`

cni*_*tar 6

我的Linux上的手册页确实明确说出来:

execl(),execlp()和execle()函数中的const char*arg和后续省略号可以被认为是arg0,arg1,...,argn.[....]

参数列表必须由NULL指针终止,并且由于这些是可变参数函数,因此必须强制转换此指针(char*)NULL.

我非常尊重Linux和Minix,我认为更权威的页面来自opengroup,它说:

arg0,...表示的参数是指向以null结尾的字符串的指针.这些字符串应构成新过程映像可用的参数列表.该列表由空指针终止.