Да, buf
используется здесь как выходной параметр. Результаты сохраняются в buf
, а возвращаемое значение stat
является кодом ошибки, указывающим, была ли операция stat
успешной или неудачной.
Это сделано так, потому что stat
- это функция POSIX, разработанная для C, которая не поддерживает механизмы сообщения об ошибках вне диапазона, такие как исключения. Если бы stat
вернул структуру, он не мог бы указывать на ошибки. Использование этого метода out-параметра также позволяет вызывающему абоненту выбирать, где он хочет сохранить результаты, но это вторичная функция. Вполне нормально передать адрес обычной локальной переменной, как вы это сделали здесь.
Вы получаете доступ к полям структуры, как и любой другой объект. Я полагаю, вы хотя бы знакомы с обозначениями объектов? Например. поле st_dev
в структуре stat
с именем buf
доступно buf.st_dev
. Итак:
cout << buf.st_dev << endl;
и т.д.