내 프로그램의 변수 수가 다양하므로 execv
을 새 경로로 만들어야합니다. 따라서 변경하지 않고 다른 변수에 argv[1]
의 값을 변경하고 싶습니다. 그러나 그것은 나를시키지 않을 것이다.argv를 다른 변수에 복사하여 원래 변수를 변경하지 않고 복사하십시오.
char** arg_exec = malloc(argc * sizeof (char*));
int i;
for(i=0;i <= argc-1; i++)
arg_exec[i] = strdup(argv[i]);
arg_exec[argc] = NULL;
if((pid = fork()) == 0){
arg_exec[1] = strcat(directory , dir_info->d_name); //some variables with the current path and a name
execv(arg_exec[0], arg_exec);
printf("Error in process %d\n", getpid());
return 1;
}
하지만이 줄을 실행 한 후 arg_exec[1] = strcat(directory , dir_info->d_name);
이 변수는 argv [1]의 제 값을 변경하고, 내 프로그램이 실패 ..
는 그것은 execl(argv[0],strcat(directory , dir_info->d_name), ..., NULL);
처럼 이후, execl
으로 잘 작동하지만 난이 있기 때문에 변수를 실행하기위한 인자가 다양하다면, 그런 식으로 구현하는 것이 좋지 않을 것이다.
EDIT1가 : Edit2가 배열 의 끝에서 NULL
을 추가 : 나는 find
의 버전을하고 있어요, 그래서 strcat와 현재 디렉토리를 들여다 폴더를 추가합니다. 이 디렉토리의 initalization이다 char *directory = strcat(argv[1],"/");
arg_exec [1] = strcat (directory, dir_info-> d_name);'? 그리고'디렉토리'는 어떻게 정의되고 iniatlised됩니까? – alk
나는'find'의 버전을 만들고 있으므로, strcat는 현재 디렉토리에 찾을 폴더를 추가 할 것입니다. –
"* Edit1 *"을 참조하십시오 : 할당 할 배열 요소의 수를 놓치 셨습니다. – alk