Я бы предложил mmap файл в пространство процесса и обработать файл как текстовую строку. Это позволит вам избежать каких-либо сложностей с распределением памяти malloc, fread и т. Д., А ОС будет обрабатывать любые входные / выходные данные по мере необходимости.
В руководстве приведен пример кода - основные сведения приведены ниже ...
int fd;
struct stat sb;
int filesize;
char *filetext;
fd = open("/path/to/my/300mb/file", O_RDONLY);
if (fd == -1)
handle_error("open");
if (fstat(fd, &sb) == -1) /* To obtain file size */
handle_error("fstat");
filesize = sb.st_size;
filetext = mmap(NULL, filesize, PROT_READ,MAP_PRIVATE, fd, 0);
if (filetext == MAP_FAILED)
handle_error("mmap");
/* you now have the file mapped into memory with
filetext[0] as the first byte and
filetext[filesize-1] as the last byte
*/
/* use the file content as a char* text string.... */
while (....) do what ever needed
/* release the file when done */
munmap(filetext,filesize);
close(fd);