Чтение и запись в файлы одновременно?

Перенес вопрос сюда. Предположим, я хочу хранить 1 000 000 000 целых чисел и не могу использовать свою память. Я хотел бы использовать файл (который может легко обрабатывать столько данных). Как я могу позволить ему читать и писать и одновременно. С помощью fstream file("file.txt', ios::out | ios::in ); не создает файл, во-первых. Но предположим, что файл существует, я не могу использовать для чтения и записи одновременно. Что я имею в виду, так это: пусть содержимое файла будет 111111Тогда, если я бегу: -

#include <fstream>
#include <iostream>
using namespace std;
int main()
{
  fstream file("file.txt",ios:in|ios::out);
  char x;
  while( file>>x)
  {
    file<<'0';
  }
 return 0;
}

Должно ли содержимое файла теперь быть 101010? Прочитать один символ, а затем переписать следующий с 0? Или, если все содержимое было сразу прочитано в некоторый буфер, не должно ли быть по крайней мере один 0 в файле? 1111110? Но содержимое остается неизменным. Пожалуйста, объясни. Спасибо.

2 ответа

Файловые потоки поддерживают два указателя, один для чтения и один для записи. Если вы выполняете операции чтения / записи, вам нужно явно установить эти указатели с помощью seeg а также seekp функции-члены. Вы также обнаружите, что выполнение форматированного ввода-вывода может помешать тому, что вы пытаетесь сделать, поэтому вы должны использовать get/put а также read/write функции-члены вместо.

См. Также Почему я не могу читать и добавлять с помощью std::fstream в Mac OS X? для больше на открытых режимах с fstreams.

Два возможных решения, которые были бы гораздо более эффективными: (i) использовать 64-битную ОС или (ii) использовать mmap,

% man mmap

Другие вопросы по тегам