czytanie i pisanie kawałkami na Linuksie przy użyciu c

Mam plik ASCII, w którym każda linia zawiera rekord o zmiennej długości. Na przykład

<code>Record-1:15 characters
Record-2:200 characters
Record-3:500 characters
...
...
Record-n: X characters
</code>

Ponieważ rozmiary plików wynoszą około 10 GB, chciałbym przeczytać rekord w kawałkach. Po przeczytaniu muszę je przekształcić, zapisać w innym pliku w formacie binarnym.

Tak więc, do czytania, moją pierwszą reakcją było stworzenie tablicy char, takiej jak

<code>FILE *stream; 
char buffer[104857600]; //100 MB char array
fread(buffer, sizeof(buffer), 104857600, stream);
</code>
Czy poprawne jest założenie, że linux wyda jedno wywołanie systemowe i pobierze całe 100 MB?Ponieważ rekordy są oddzielone nową linią, szukam znaku po znaku dla nowego znaku linii w buforze i rekonstruuję każdy rekord.

Moje pytanie brzmi: w jaki sposób powinienem czytać w kawałkach, czy jest lepsza alternatywa do odczytu danych w kawałkach i odtwarzania każdego rekordu? Czy istnieje alternatywny sposób odczytu x liczby linii o zmiennej wielkości z pliku ASCII w jednym wywołaniu?

Następnie podczas pisania robię to samo. Mam bufor zapisu, który przekazuję do fwrite, aby zapisać cały zestaw rekordów w jednym wywołaniu.

<code>fwrite(buffer, sizeof(buffer), 104857600, stream);
</code>

UPDATE: Jeśli i setbuf (stream, buffer), gdzie bufor jest moim 100MB buforem char, czy fgets powróci z bufora lub spowoduje IO dysku?

questionAnswers(3)

yourAnswerToTheQuestion