Безопасно ли вызывать fflu sh () без fclose () - PullRequest
1 голос
/ 04 марта 2020

Я пишу регистратор для моего встроенного приложения. Мне нужно записать все журналы в файл. В настоящее время я открываю и закрываю файл для каждой записи.

Чтобы повысить производительность, безопасно ли сохранять файл журнала открытым во всей области приложения и вызывать fflu sh (), не закрывая файл для каждой записи?

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Если вы прочитаете руководство по программированию linux, вы обнаружите, что fclose "очистит поток, на который указывает поток, и закроет базовый дескриптор файла". Таким образом, вы можете просто вызвать fclose () без fflu sh ().

Если вы хотите записывать в один и тот же файл несколько раз. Вы можете держать файл открытым и просто вызывать fflu sh несколько раз. «fflu sh () принудительно записывает все буферизованные данные пользовательского пространства для данного потока вывода или обновления через базовую функцию записи потока».

Одним словом, fflu sh записывает буферизованные данные в файл, закрыть запись буферизованных данных и закрыть файл.

0 голосов
/ 04 марта 2020

Должно быть безопасно просто вызывать fflush() после каждой записи журнала и держать файл открытым, но настоятельно рекомендуется открывать файл в режиме добавления, особенно если другие процессы записывают в тот же файл журнала. В этом случае было бы недостаточно обеспечить запись в атомы c.

...