Я не понимаю вполне, что Вы хотите. Вы хотите инкрементно обработать файл, читая одну строку из него, затем отказываетесь от него и обрабатываете следующее? Или Вы хотите считать весь файл в буфер? Если Вы хотите последнего, я думаю, что это является соответствующим (проверка на ПУСТОЙ возврат для malloc и fopen в реальном коде для того, существует ли файл и получили ли Вы достаточно памяти):
FILE *f = fopen("text.txt", "rb");
fseek(f, 0, SEEK_END);
long pos = ftell(f);
fseek(f, 0, SEEK_SET);
char *bytes = malloc(pos);
fread(bytes, pos, 1, f);
fclose(f);
hexdump(bytes); // do some stuff with it
free(bytes); // free allocated memory
Если mmap (2) доступен в Вашей системе, можно открыть файл и отобразить его в память. Тем путем у Вас нет памяти для выделения, Вы даже не должны читать файл, система сделает это. <забастовка> можно использовать fseek () обманывает litb, дал для получения размера забастовка>.
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
РЕДАКТИРОВАНИЕ : необходимо использовать lseek()
для получения размера файла.
int fd = open("filename", O_RDONLY);
int nbytes = lseek(fd, 0, SEEK_END);
void *content = mmap(NULL, nbytes, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
Если Вы хотите использовать ISO C, используйте эта функция .
Это - ответ litb, перенесенный с некоторой обработкой ошибок...