'execl'是否需要NULL作为最后一个参数?
my linux(Ubuntu)的手册页没有提到需要NULL作为最后一个参数,minix版本的手册页'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(默认)。`我的
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版本。但我知道我看到它在执行段落中重复了这句话。