Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
'execl'是否需要NULL作为最后一个参数?_C_Linux - Fatal编程技术网

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

'execl'是否需要NULL作为最后一个参数?,c,linux,C,Linux,my linux(Ubuntu)的手册页没有提到需要NULL作为最后一个参数,minix版本的手册页execl提到需要NULL作为最后一个参数。然而,调用modprobe时,我有一个奇怪的行为,我解决了将NULL作为最后一个参数的问题 我的工作方式是: execl("/sbin/modprobe","modprobe","pl2303",NULL); 如果我这样做: execl("/sbin/modprobe","modprobe","pl2303") 我得到一个错误编号14(默认)。`我的

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

我的工作方式是:

execl("/sbin/modprobe","modprobe","pl2303",NULL);
如果我这样做:

execl("/sbin/modprobe","modprobe","pl2303")

我得到一个错误编号14(默认)。`

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

execl()中的常量char*arg和后续省略号, execlp()和execle()函数可以看作是arg0、arg1、。。。, 阿尔金。 [……]

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

在充分尊重Linux和Minix的情况下,我认为更具权威性的页面是来自以下页面:

arg0表示的参数,。。。指向null的指针是否终止 字符串。这些字符串应构成参数列表 可用于新进程映像列表以null结尾 指针


第一个参数是可执行文件的路径,下面的参数实际上是已执行程序的
argv
。这些参数的列表以
(char*)0

从手册页引用:

名单 参数必须由空指针终止,并且 变量函数,此指针必须为强制转换(char*)NULL


也参考:,

是的,ISO C标准要求
main
argv[argc]
应为空,以允许程序在末尾使用
argc
或哨兵,同样的推理适用于类似
exec
的调用

POSIX文档可在上找到,它们说明:

argv和environ数组均由空指针终止。终止argv数组的空指针不计入argc


再次检查您的手册页。除了手册页上的内容外,请仔细想想:
execl
需要某种方法来检测参数列表的结尾。我认为它只是引用了命令的execv版本。但我知道我看到它在执行段落中重复了这句话。