【发布时间】:2016-07-14 03:44:15
【问题描述】:
我试图设置类似于父进程的子进程的环境,我需要用字符串填充名为 envp 的数组,如下所示:
char *envp = malloc(sizeof(args) / sizeof(char *));
strcpy(envp[0], strcat("HOME=", getenv("HOME")));
envp[1] = strcat("PATH=", getenv("PATH"));
envp[2] = strcat("TZ=", getenv("TZ"));
envp[3] = strcat("USER=", getenv("USER"));
envp[4] = strcat("LOGNAME=", getenv("LOGNAME"));
envp[5] = 0;
内部 if(fork() ==0)
setenv("parent", cwd, 1);
if((execve(args[0], &args[0], envp)) < 0 ){
perror(*args);
exit(EXIT_FAILURE);
}
我这样做是因为我不知道这些环境变量的值,所以我想复制父变量以便在将替换子进程的 execve() 中使用它们! 我使用 execve() 而不是 execvp() 因为我想在执行命令之前处理搜索 cwd 并搜索未找到 cwd 的 shell 路径名的目录。
所以我的问题是:如何以正确的方式设置数组的值? 另外,我是否误解了任何概念?
我在这里看了很多帖子,但很明显我迷路了! 提前致谢,
【问题讨论】:
-
char *envp是错误的。您需要一个 array 字符指针。 execve() 还需要一个 char* 指针数组作为其第三个参数。envp[1] = strcat(完全错误。 envp[1] 是一个字符。一个字符,而不是指针。strcat()的工作方式与您认为的不同。 (并且第一个参数必须指向一个可写的字符数组,而不是字符串字面量。)
标签: c shell environment-variables exec