У меня есть файлы субтитров / srt с данными, генерируемыми вторым. Я пытаюсь извлечь данные из них и сохранить их в текстовые файлы
в цикле while (1) это простая операция чтения и записи текста.
Но я обнаружил, что использование fgets для обхода файла приводит к тому, что эта простая операция имеет очень высокую загрузку ЦП (команда top). Чем больше количество феттов выше
использование процессора.
Кодовый бит:
int convert_to_txt(FILE *f1, FILE *f2) {
static int str_len = 0;
char cap_nxt_tmp[128];
while (fgets(cap_nxt_tmp, 128, f1) != NULL) {
fprintf(f2, "%s\n", cap_nxt_tmp);
}
return 0;
}
int main(int argc, char* argv[]) {
FILE *inputFilePtr;
FILE *outputFilePtr;
char inputPath[1024] = "storage/sample.srt";
char outputPath[1024] = "storage/sample.txt";
while (1) {
outputFilePtr = fopen(outputPath, "w");
inputFilePtr = fopen(inputPath, "r");
if (inputFilePtr == NULL || outputFilePtr == NULL) {
perror("Error");
}
convert_to_txt(inputFilePtr, outputFilePtr);
fclose(inputFilePtr);
fclose(outputFilePtr);
// theres a break on an end condition lets say least run time is an hour.
}
return 0;
}
Я не могу понять, что не так в том, как я использую fgets для чтения файла srt / captions (1-2 МБ на файл), простая операция ввода / вывода в текстовом файле не должна потреблять слишком много ресурсов процессора.
этот базовый файловый ввод-вывод (1) такого языка, как python, показывает использование процессора только на 2-3%.
но это в c показывает около 30% использования процессора.
Как я могу уменьшить использование процессора без использования сна. есть ли альтернатива fgets процессору?