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?