프로젝트의 경우, 동시에 실행할 수있는 두 개의 프로그램 인스턴스를 여러 개 실행할 수 있어야합니다. 이렇게하려면 필요한 경우 일부 매개 변수를 전달할 수 있도록 execle
을 사용합니다. 여기 (약) 내 코드 : n
는 second_program에 대한 execle 1보다 큰 및 my_env
이 NULL
여부입니다 weither third_program 나쁜 ADRESS을 반환 할 때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);
내 문제입니다.
execl
으로 교체하면 모든 것이 정상적으로 작동합니다.
은'...'코드에서 컴파일러 오류가 발생합니다. 따라서 사용중인 실제 코드를 표시하지 않습니다. 아마도이 오류는 여기에 게시 한 코드가 아닌 실제 코드입니다. – nos
분명히 실제 코드에는 포함되어 있지 않습니다. 그렇지 않으면 execl조차도 작동하지 않습니다. – systemasis
문제는 당신이'my_env'를 설정하는 방법에 있습니다. 'char * my_env [2]; '가 필요하다. 그래서 포인터를 얻을 수있다. –