對於項目,我必須能夠啓動多個程序的多個實例才能同時運行。爲此,我使用execle
以便能夠在需要時傳遞一些參數。這裏是(大約)我的代碼:execle在循環調用時返回錯誤的地址
char **my_env;
if(argc == 10){
my_env[0] = malloc(20+sizeof(argv[9]));
my_env[1] = NULL;
snprintf(my_env[0], 20+sizeof(*argv[9]), "PREFIXE=%s", argv[9]);
}else{
my_env[0] = NULL;
}
for(i=1; i <= n; i++){
if((pid=fork()) == 0){
execle(first_program, first_program, some_args, ..., (char *) 0, my_env);
perror("Error at first_program's launch");
exit(1);
}else{
if((pid = fork()) == 0){
execl(second_program, second_program, some_args, ..., (char *) NULL, my_env);
perror("Error at second_program's launch");
exit(1);
}
}
}
execle(third_program, third_program, some_args, ..., (char *) NULL, my_env);
perror("Error at third_program's launch");
exit(1);
我的問題是,當n
大於1,爲second_program的execle和weither my_env
是NULL
與否third_program返回一個錯誤ADRESS。
當我將它們替換爲execl
時,一切正常。
的''...在你的代碼會導致編譯錯誤。因此,您不會向我們展示您正在使用的實際代碼。也許錯誤是你的真實代碼,而不是你在這裏發佈的代碼。 – nos
我明顯沒有那些在我的實際代碼中。否則,即使execl也不行。 – systemasis
問題在於你設置'my_env'的方式。你需要'char * my_env [2];'這樣你就有了一些指針。 –