Использование fstat для определения типа файла

Итак, у меня есть задание, которое в основном представляет собой упражнение по сравнению скорости системных вызовов, в отличие от библиотечных функций. Мы сортируем строку, которую мы берем из файла через стандартный ввод. Мы должны определить, является ли файл обычным файлом или нет, используя fstat. Я прочитал страницу руководства, и хотя я знаю, ЧТО это делает, у меня проблемы с выяснением, как это использовать.

Я знаю, что она возвращает структуру статистики, так что я могу буквально просто создать переменную и сохранить ее таким образом? Пример:

int n;
struct stat *val;
n = fstat(0, val);

Так вы получаете структуру? Это возвращено куда-то еще? Мне нужен доступ к переменной off_t st_size, чтобы я знал, сколько байтов в файле. И это может быть приведено к int?

Кроме того, очевидно, что вы можете использовать поле st_mode, чтобы проверить, является ли файл обычным (используя макросы S_ISREG), но... как? Возвращает ли оно true из false или что-то еще? Это раздражает, потому что я могу найти все эти документы, рассказывающие, что такое поля, а не то, как их использовать.

Если у меня есть обычный файл, я должен выделить достаточно памяти для его хранения перед вызовом любой функции. Если нет, то я перераспределяю память, когда читаю. Я закончил вторую часть, я просто не знаю, как правильно использовать fstat.

1 ответ

fstat не выделяет память, вам нужно дать ей адрес заранее выделенного пространства. Например:

int n;
struct stat myStat;
n = fstat(0, &myStat);

Обратите внимание на отсутствие указателя.

Другие вопросы по тегам