Почему у fstreams есть один курсор для чтения и записи? (Логически и технически) [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему у fstreams есть один курсор для чтения и записи? (Логически и технически) [дубликат]

Сообщение Anonymous »

Рассмотрим следующий код:

Код: Выделить всё

#include 
#include 

using std::fstream;

int main()
{
fstream file("text.txt", ios::out| ios::in |ios::trunc| ios::binary);
if (!file)
throw"ERROR\n";

char y = 't';

streampos get = file.tellg(); // (static_cast(get) == 0)
streampos put = file.tellp(); // (static_cast(put) == 0)

file.write(&y, sizeof(y)); // I'd assume that it will increment *only* the putting
cursor

get = file.tellg(); // Assumingly, the getting cursor will remain the same:
// (static_cast(get) == 0) . In reality: (static_cast(get) == 1)
put = file.tellp(); // Assumingly and in reality: (static_cast(put) == 1)

return 0;
}
Мне сказали, что эти два курсора независимы друг от друга, и это имело для меня смысл. 2 направления потока, два курсора. Поэтому я был очень удивлён результатами своих проверок.
Я пытался найти ответы, почему это происходит, но лучшее, что мне удалось найти, это: . В котором говорится:

Оба searchg и seekp имеют одинаковый эффект; использование одного из них меняет положение другого.

это:

Кстати, повторный поиск и поиск не нужны. Чтобы изменить режимы, вам нужно установить положение только один раз.

Но эти ответы просто отмечают поведение, а я этого не делаю. Не могу понять причину такого поведения. Потому что почему файл fstream, открытый для входных и выходных потоков, имеет один курсор для двух потоков?
Также есть
этот ответ:
На индикатор позиции, который отмечает текущую позицию в файле, влияют как операции ввода, так и операции вывода.

< blockquote>
Когда вы выполняете чтение после записи или наоборот, поток должен быть перемещен обратно.

Что я и сделал тоже хотелось бы получить объяснение. Потому что, помимо того, что отмечают другие ответы, в этом ответе также отмечается:

Если операция ввода достигает конца файла, выполняется запись непосредственно после этого - нормально.

Это тоже не имеет смысла, потому что он говорит, что чтение сразу после конца файла - это нормально. ..
Все это для меня непонятно. Поэтому мой вопрос: почему fstream работает именно так? Почему при поддержке двух направлений потока имеется только один курсор?
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/787 ... technicall
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»