2013-11-19 2 views
0

Я пишу приложение, которое производит и регистрирует большое количество данных в виде ASCII и двоичного вывода (не смешанного, так или другого в зависимости от журнала). Приложение однопоточное (должно сделать все проще), и я хочу записать свои данные на диск в том порядке, в котором он был сгенерирован. Мне нужно реализовать метод write (char * data), который принимает нулевой конец символьного массива и записывает его на диск. В идеале я хочу, чтобы функция буферизовала данные и вернула их до того, как данные будут записаны на диск ... Я полагаю, что Windows должна каким-то образом настроить поток и сделать это в фоновом режиме. Единственное, что меня волнует, это то, что я получаю данные в файле журнала в том порядке, в котором он был написан. Каков наилучший способ сделать это? Кто-то еще реализовал текущий метод записи, и он выглядит так:C++ write filestream

void writeData(const char* data, int size) 
    { 
     if (fp != 0) 
      fwrite (data, 1, size, fp); 
    } 

fp - это указатель на файл.

C++ stdio.h заголовок: http://www.cplusplus.com/reference/cstdio/fwrite/

+0

Если это только для Windows, вы можете использовать перекрывающиеся io, чтобы сделать это, однако может быть сложно нормально работать. http://msdn.microsoft.com/en-us/library/aa365747%28VS.85%29.aspx –

+0

В итоге я попытался использовать библиотеку Boost :: Thread. Я все еще работаю над решением, но я нашел это очень полезным: http://boqian.weebly.com/c-programming.html –

ответ

0

В многопоточной, может быть, вы можете использовать что-то вроде очереди журнала. В одной нити, заказ гарантирован

0

Если вы говорите только о Windows, то у вас в значительной степени есть два варианта: Overlapped I/O through the WinAPI или настройка отдельного потока в вашей программе для обработки ввода-вывода файлов (что потенциально может быть кросс-платформенный с помощью pthreads)