【发布时间】:2013-04-06 13:40:51
【问题描述】:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#define MAXLINIE 100
main(int argc, char* argv[]) {
if (fork()==0){
execl("/bin/> temporar.txt", "/bin/> temporar.txt", ">temporar.txt", NULL);
}
}
基本上,我要做的是使用 unix 中的进程创建文件,这是我的代码,但由于某种原因它不起作用,我不太了解 execl 命令以及为什么前两个参数必须相同:execl("/bin/ls", "/bin/ls", "-l", NULL); 这很好用,有人可以帮帮我吗?
非常感谢!
【问题讨论】:
-
"/bin/> temporar.txt"背后的想法是什么? -
最后一个参数应该是
(char *) NULL,而不是NULL。 -
所有参数都将作为可变参数传递,具有
void*类型。无论如何,C 接受某种隐式转换,所以NULL即使对于char*也是可以的。 -
@Ioentar:逐字逐句来自
man execl:The list of arguments must be terminated by a NULL pointer, and, since these are variadic functions, this pointer must be cast (char *) NULL. -
你是对的。那是用
man execl写的,它应该是理想的。但这对 C 来说不是问题。更不用说(char*)NULL甚至 execl 实现。如果您在启用最大警告级别的情况下编译execl(..., NULL),您将不会收到任何关于隐式转换为char*的警告。