C 프로그램에서 다른 프로그램을 시작하고 쉘과 PID를 반환하고 싶습니다. 여기 제가 시도한 바가 있습니다.C에서 다른 프로그램 실행
struct app_names{
const char *run_args[TOTAL_NUM_APP] = {
" inp.in",
" 3000 reference.dat 0 0 100_100_130_ldc.of",
}
const char *run_exe[TOTAL_NUM_APP] = {
"./mcf",
"./lbm"
}
};
struct app_names SPEC_RUN;
pid_t child;
child = fork();
char RUN_EXE[2048] = "";
strcat(RUN_EXE, SPEC_RUN.run_exe[0]);
strcat(RUN_EXE, EXE_SUFIX);
strcat(RUN_EXE, SPEC_RUN.run_args[0]);
if(!child)
execlp(SPEC_RUN.run_exe[0], SPEC_RUN.run_exe[0], SPEC_RUN.run_args[0], (char *)0);
내가 정확히 여기에 누락 되었습니까? 왜 프로그램을 시작하지 않습니까?
그것은 아마 내가 본 동안 이상한 구조이다. 그 너머 (그리고 끔찍한 버퍼 오버플로가 strcats에 고정 크기 버퍼로 위험 함) execlp의 반환 값을 확인 했습니까? – jcaron
'strerror (errno)'값을 확인하십시오. 또한, 구조체 C 유효한 코드가 무엇입니까? – Jack
당신은 GDB를 실행하고 당신이 패스 한'execlp' parms과 실패했을 때'errno'의 값을 확인하기 위해 30 초 내에 이것을 풀 수 있습니다. 이 질문을 입력하는 데 걸리는 시간보다 짧은 시간이 걸렸을 것입니다. – Duck