我在C中尝试了一些exec
族函数,我对环境变量的问题很少,这是我的代码:
find.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv){
char *line = getenv("LINE");
char *target = getenv("TARGET");
if(!line || !target){
printf("LINE or/and TARGET not found\n");
return 1;
}
if(strstr(line,target))
puts(line);
return 0;
}
process.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
putenv("LINE=Hello world");
putenv("TARGET=Hello");
execl("./find","./find",NULL);
return 0;
}
输出“gcc process.c -o process&amp;&amp; ./process”
Hello world
快速解释代码。
find.c 需要读取两个环境变量并检查TARGET
变量值是否为LINE
变量值的子字符串。如果是,则打印LINE
变量值。
process.c 通过执行 find.c 来替换自己。
问题
知道正确的方法是使用execle
,为什么程序process.c使用execl
和putenv
?换句话说,如果没有通过execle
传递,那么在被替换的进程中创建环境变量也不会替换环境变量?
fork
进程是否对上述问题有相同的答案?那么请求进程复制,替换或共享环境变量吗?
谢谢
答案 0 :(得分:1)