0
파일에서 읽은 프로세스 목록을 실행하고 일정을 잡으려고합니다. 파일은 무작위 순서로 실행되고 있으며 왜 이런 일이 발생하는지 궁금합니다. 첫 번째, 두 번째, etc 파일에서 실행중인 명령을 나타내는 간단한 print 문을 사용하며, 항상 다른 (겉으로보기에 무작위 인) 명령으로 인쇄합니다. 지금까지 내 기능을 엉망으로 만들고있는 것은 아니며, 왜 이것이 궁금한 것일까 요?임의 순서로 파일을 실행하는 프로세스 컨트롤러
main.c를
int main(int argc, char ** argv) {
pid_t pid[50];
pid_t wpid;
int i, j;
int status = 0;
char *newenvp[] = {NULL};
char *newargv[] = {"./files.txt", NULL};
printf("Before forking in the parent\n");
int numProgs = readPrograms();
for (i=0; i<numProgs; i++) {
pid[i] = fork();
if (pid[i] < 0) {
perror("fork error");
exit(EXIT_FAILURE);
}
else if (pid[i] == 0) {
printf("Child process running\n");
execve(programs[i], newargv, newenvp);
perror("execve error");
exit(EXIT_FAILURE);
}
}
for (i=0; i<numProgs; i++) {
wait(&status);
}
return 0;
}
char* programs[50];
int readPrograms();
readPrograms.c
아래int readPrograms() {
int i=0;
char line[50];
int numProgs = -1;
FILE *file;
file = fopen("files.txt", "r");
while(fgets(line, sizeof(line), file)!=NULL) {
line[strlen(line)-1] = '\0';
programs[i]=strdup(line);
i++;
numProgs++;
}
fclose(file);
return numProgs;
}
files.txt 포크를 호출 할 때
./first
./second
./third
./fourth
'프로그램 [i]] 인구입니까? 메모리 할당? –
@SouravGhosh :'strdup'는 새로운 문자열 (소스 문자열의 복사본)에 대한 포인터를 반환합니다. 이 새로운 문자열은'malloc'을 사용하여 할당됩니다. –