Во-первых, вы должны избегать пробелов в именах файлов Linux. Таким образом, ваш пример должен быть FILE *fp= fopen("that_file","r");
с пробелами (или даже управляющими символами, такими как перевод строки) в именах файлов, это дурной вкус.
А в Linux дескриптор файла (который не a FILE*
handle!) Представляет собой небольшое целое число, которое обрабатывается ядром: внутри ядра процессы имеют таблицу открытых файлов и их код приложения ссылается (используя системные вызовы, такие как open
и read
и т. д.) на эти файлы по дескриптору файла. Стандартная библиотека C управляет буферизацией и файловыми дескрипторами (поэтому внутри структуры данных FILE
есть буферы и файловый дескриптор).
Таким образом, если у вас есть один процесс, читающий файл, и другой, записывающий его одновременно (это плохая практика), процесс чтения может прочитать все доступные байты.
Так что вам не нужно «обновлять» ваш fp
, но ваш код дрянной (из-за отсутствия синхронизации между процессом чтения и записи).