double arrow

Функция fstat


Функция

#include <sys\stat.h>

int fstat(char * handle, struct stat * buff)

записывает информацию об открытом файле (или директории), связанным с дескриптором handle в структуру stat. Aргумент buff адресует структуру stat (определенную в файле sys\stat.h).

Структура содержит следующие поля:

st_mode - битовая маска, дающая информацию о режиме открытия файла;

st_dev - идентификатор дисковода, на котором был открыт файл, или номер handle, если файл находится на устройстве;

st_rdev - так же, как и st_dev;

st_nlink - присваевается целая константа 1;

st_size - размер открытого файла в байтах;

st_atime - ближайшее время открытия файла, во время которого он был модифицирован;

st_mtime - так же, как и st_atime;

st_ctime - так же, как и st_atime.

Структура stat содержит на три поля больше, чем перечислено выше, они содержат данные, которые под управлением DOS не имеют значения.

Битовая маска, дающая информацию о режиме открытого файла, содержит следующие биты.

Один из следующих битов должен быть установлен:

S_IFCHR - установлен, если параметр handle указывает на устройство (fstat);

S_IFREG - установлен, если обычный файл определяется параметром handle

Один или оба следующих бита должны быть установлены:




S_IWRITE - установлен, если пользователь имеет разрешение на запись;

S_IREAD - установлен, если пользователь имеет разрешение на чтение.

Битовая маска также имеет биты чтения/записи, они устанавливаются в соответствии с режимом доступа к файлу.

Если информация об открытом файле была успешно получена, функция возвращают значение 0. В случае ошибки (невозможно получить информацию), функция возвращает -1 и присваивают переменной errno: EBADF - Неверный номер файла.

Пример:

#include<sys\stat.h>

#include<stdio.h>

#include<time.h>

int main(void)

{

struct stat statbuf;

FILE *stream;

/* открыть файл для изменения */

if((stream = fopen("DUMMY.FIL","w+")) == NULL)

{

fprintf(stderr,"Не могу открыть файл.\n");

return 1;

}

fprintf(stream,"Это тест");

fflush(stream);

/* получить информацию о файле */

fstat(fileno(stream),&statbuf);

/* вывести полученную информацию */

if(statbuf.st_mode & S_IFCHR)

printf("Это устройство\n");

if(statbuf.st_mode & S_IFREG)

printf("Это файл\n");

if(statbuf.st_mode & S_IREAD)

printf("Разрешение на чтение\n");

if(statbuf.st_mode & S_IWRITE)

printf("Разрешение на запись");

printf("Метка диска:%c\n",'A'+statbuf.st_dev);

printf("Размер в байтах: %ld\n",statbuf.st_size);

printf("Время последнего открытия: %s\n",

ctime(&statbuf.st_ctime));

return 0;

}







Сейчас читают про: