fscanf в цикле while не останавливает итерацию - PullRequest
0 голосов
/ 12 апреля 2019

В файле у меня есть огромное количество слов (10.000), с которыми я хотел бы работать «эффективно», поэтому я решил разделить их на куски по 100 слов, распределенных среди максимального количества детей. процессы (8), чтобы избежать накладных расходов, но мой оператор while для чтения файла не станет ложным. Вот мой код без соответствующего импорта:

FILE* fp = fopen(argv[1], "r");
int index= 0;
int childs_amount = 0;

char* word = malloc(sizeof(char) * 46);  /* 45 is the len of the largest word in english */
char** words = malloc(sizeof(char*) * 100);  /* 100 is the amount of words I want to assign to a child */

while(fscanf(fp, "%s", word) == 1) {
    words[index] = malloc(sizeof(char) * 46);
    strcpy(words[index], word);
    index++;

    if (index == 100) {
        index = 0;
        pid_t child_pid = fork();
        if (child_pid == 0) {  /* Child process */
            usleep(5000);  /* do something */
            exit(0);
        } else {  /* Parent Process */
            childs_amount++;
            if (childs_amount == 8) {  /* 8 is the max amount of childs I want at the same time */
                pid_t ended_pid = wait(&status);  /* wait for any process to finish */
                childs_amount--;
            }
        }
    }
}
fclose(fp);

Это похоже на то, что мои дочерние процессы обращаются к нему, или, может быть, я должен закрывать файл перед каждым выходом (0) , но я действительно не знаю, пожалуйста, помогите.

...