Если под дескриптором файла вы подразумеваете FILE *
, то открытие в начале и закрытие в конце с большим количеством пользователей должно работать, как и ожидалось, даже если есть несколько потоков, если вы выполняете запись с использованием одного вызова функции stdio POSIX системы.
Если под дескриптором файла вы имеете в виду целое число, возвращаемое открывающим вызовом операционной системы, то они обычно поточнобезопасны в рамках одного вызова write
(или аналогичного), поскольку операционная система блокирует файл при передаче данных в связанные буферы с этим файлом.
Если программа является однопоточным приложением, вам не о чем беспокоиться.
Если бы вам пришлось многократно открывать, добавлять и закрывать файл, вы могли бы столкнуться с проблемами, если бы использовали stdio's FILE *
с несколькими потоками или если вызовы AppendFile
были каким-то образом сделаны рекурсивно, потому что разные FILE *
s не будет совместно использовать буферы в приложении, и, так как файл, измененный в одном потоке, другие потоки могут перезаписать эти изменения.
Аналогичная вещь может произойти с дескрипторами файла os (целые числа, возвращаемые open), поскольку различные вызовы open
будут приводить к разным дескрипторам файла, и они не будут совместно использовать свою позицию поиска, поэтому по мере роста файла различные файловые дескрипторы заканчиваются с позициями поиска, которые фактически не находились в конце файла, если вы не можете открыть файл в режиме только добавления (O_APPEND
), где операционная система обрабатывает это для вас.
Открытие и закрытие файла снова и снова создает много дополнительной работы в любом случае.