Использование stat () для определения размера для fread () - PullRequest
0 голосов
/ 04 декабря 2018

Мой файл не читается до конца при использовании fread(), а размер возвращается из stat()

Руководства. Я проверил:

http://man7.org/linux/man-pages/man2/stat.2.html

http://man7.org/linux/man-pages/man3/fread.3.html

Вот мой код:

FILE *file = fopen(path, "r");
if (file == NULL) {
    printf("failed!\n");
    return 0;
}

struct stat fileattribs;
size_t size;    

if (stat(path, &fileattribs) < 0)
    return 0;

size = fileattribs.st_size;

char *buff = (char *) malloc(sizeof(char) * (size + 1));
fread(buff, sizeof(char), size, file);
buff[size] = '\0';

Вот файл, который я пытаюсь прочитать:

#version 330 core

out vec4 light_fragment_color;

uniform vec3 object_color;
uniform vec3 light_color;

void main(void) {
    light_fragment_color = vec4(light_color * object_color, 1.0);
} 

Если я увеличу переменную размера (например, на 5) в приведенном выше коде, то чтение будет успешным, но произойдет ошибка (да, это была глупая идея ...).

Как правильно прочитать файл с функциями stat () и fread ()?

1 Ответ

0 голосов
/ 04 декабря 2018

Только одна мысль: Может быть, ваш файл действительно прочитан до конца, вы просто его не видите.Потому что, если ваш файл содержит двоичный ноль, этот используется как терминатор строки вместо вашего.(Потому что первый двоичный ноль в буфере всегда отмечает конец строки.)

...