fstat(), fstat64()

Получить информацию о файле по его дескриптору

Прототип:

#include <sys/types.h>
#include <sys/stat.h>
int fstat( int filedes,
struct stat *buf );
int fstat64( int filedes,
struct stat64 *buf );

Аргументы:

filedes
Дескриптор файла, информацию о котором нужно получить.
buf
Указатель на буфер типа struct stat, в котором функция может разместить информацию о файле.

Библиотека:

libc

Описание:

Функции fstat() и fstat64() получают информацию о файле, определяемом filedes, и размещают ее в структуре, на которую указывает buf.

Заголовочный файл <sys/stat.h> содержит определение struct stat, а также следующие макросы:

Аргументы макросов:

m
Значение st_mode в структуре struct stat.
buf
Указатель на структуру struct stat.

Макрос возвращает ненулевое значение при положительном исходе, нулевое - при отрицательном.

Права доступпа определяются комбинацией битов поля st_mode структуры struct stat. Эти биты определены в заголовочном файле <sys/stat.h>. Для дополнительной информации смотрите struct stat.

Поле st_mode также кодирует следующие биты:

S_ISUID
Установить идентификатор пользователя при выполнении. Эффективный идентификатор пользователя процесс (EUID) устанавливается равным идентификатору владельца файла при запуске файла как программы. Для обычного файла этот бит может быть сброшен по соображениям безопасности при любой записи.
S_ISGID
Установить идентификатор группы при выполнении. Эффективный идентификатор группы процесс (EGID) устанавливается равным идентификатору группы файла при запуске файла как программы. Для обычного файла этот бит может быть сброшен по соображениям безопасности при любой записи.

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EBADF
Аргумент filedes не является корректным файловым дескриптором.
ENOSYS
Функция fstat() не реализована для файловой системы, в которой находится filedes.
EOVERFLOW
Размер файла в байтах, количество блоков, выделенных для файла или серийный номер файла не могут быть корректно размещены в структуре, на которую указывает buf.

Примеры:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main( void )
{
int filedes;
int rc;
struct stat buf;
filedes = open( "file", O_RDONLY );
if ( filedes != -1 )
{
rc = fstat( filedes, &buf );
if ( rc != -1 )
{
printf( "File size = %d\n", buf.st_size );
}
close( filedes );
return (EXIT_SUCCESS);
}
return (EXIT_FAILURE);
}

Классификация:

fstat() — POSIX 1003.1; fstat64() — Поддержка больших файлов

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

struct stat, creat(), dup(), dup2(), errno, fcntl(), lstat(), open(), pipe(), sopen(), stat()




Предыдущий раздел: Описание API системной библиотеки