Comments 11
Это не ошибка, а Ваша невнимательность :) Этим функциям свойственно в том числе такое явление, как буферизация. Должно быть написано везде, где описаны эти функции. Разумеется, что после записи и перед чтением нужно сбрасывать буферы. Также есть специальные функции для управления буферизацией.
в чем тогда смысл буферизации, если я после каждой записи буду сбрасывать буфер?
да и я ведь читал данные после записанных, они не перекрывались.
в любом случае, я считаю, беспокоится по этому поводу должна библиотека, а не я. glibc, к слову, себе такого не позволяет.
в любом случае, я считаю, беспокоится по этому поводу должна библиотека, а не я. glibc, к слову, себе такого не позволяет.
>в чем тогда смысл буферизации, если я после каждой записи буду сбрасывать буфер?
Смысл буферизации в том, чтобы сбрасывать буфер тогда и только тогда, когда это требуется для логики приложения. Другими словами, буферизация — это как раз сбрасывание буфера не после каждой записи, а тогда, когда надо. Ваша ситуация с точки зрения msvcrt, очевидно, попадает под ситуацию «надо».
>да и я ведь читал данные после записанных, они не перекрывались.
>в любом случае, я считаю, беспокоится по этому поводу должна библиотека, а не я. glibc, к слову, себе такого не позволяет.
Я знаю лишь то, что эти функции буферизуют операции ввода-вывода. Сейчас специально ещё раз посмотрел — да, это именно так. К сожалению, я не знаю тонкостей устройства библиотек и соответствия их стандарту ANSI C, а то бы подсказал — должна ли в случаях пишем-и-сразу-читаем об этом беспокоиться библиотека и отлавливать такие ситуации или предполагается, что программист знает что делает.
Смысл буферизации в том, чтобы сбрасывать буфер тогда и только тогда, когда это требуется для логики приложения. Другими словами, буферизация — это как раз сбрасывание буфера не после каждой записи, а тогда, когда надо. Ваша ситуация с точки зрения msvcrt, очевидно, попадает под ситуацию «надо».
>да и я ведь читал данные после записанных, они не перекрывались.
>в любом случае, я считаю, беспокоится по этому поводу должна библиотека, а не я. glibc, к слову, себе такого не позволяет.
Я знаю лишь то, что эти функции буферизуют операции ввода-вывода. Сейчас специально ещё раз посмотрел — да, это именно так. К сожалению, я не знаю тонкостей устройства библиотек и соответствия их стандарту ANSI C, а то бы подсказал — должна ли в случаях пишем-и-сразу-читаем об этом беспокоиться библиотека и отлавливать такие ситуации или предполагается, что программист знает что делает.
> я считаю, беспокоится по этому поводу должна библиотека, а не я.
До менеджмента памяти дошли?) Так вот и память тоже сами вычищать будете ;)
не надо винить язык, это просто другой уровень.
До менеджмента памяти дошли?) Так вот и память тоже сами вычищать будете ;)
не надо винить язык, это просто другой уровень.
Спасибо, автор
Что-то я вообще слабо улавливаю смысл приведенного кода.
Пишем b по смещению 1 в 1 файл (должно получиться 1b345).
Читаем байт по смещению 2 из 1 файла (должно получиться 3)
Пишем байт по смещению 1 в 2 файл (должно получиться 13345)
Читаем байт по смещению 2 из 2 файла (зачем?)
Или это я уже слишком спать хочу? )
Пишем b по смещению 1 в 1 файл (должно получиться 1b345).
Читаем байт по смещению 2 из 1 файла (должно получиться 3)
Пишем байт по смещению 1 в 2 файл (должно получиться 13345)
Читаем байт по смещению 2 из 2 файла (зачем?)
Или это я уже слишком спать хочу? )
Sign up to leave a comment.
fwrite/fread в windows могут повредить ваши данные