Stat
stat
Функция Получает информацию о файле.
Синтаксис #inslude
int stat(char *path, struct stat *buff);
Файл, содержащий sys\stat.h прототип
Описание Функция stat записывает информацию о файле (или директории) в структуре stat.
Аргумент buff адресует структуру stat (определен- ную в файле sys\stat.h). Структура содержит сле- дующие поля:
st_mode битовая маска, дающая информацию о режиме открытия файла.
st_dev идентификатор дисковода содержащего файл.
st_rdev также, как и st_dev.
st_nlink присваевается целая константа 1.
st_size размер открытого файла в байтах.
st_atime ближайшее время открытия файла, во время которого он был модифицирован.
st_mtime также, как и st_atime.
st_ctime также, как и st_atime.
Структура stat содержит на три поля больше, чем перечислено выше, но они содержат данные, которые под управлением MS-DOS не имеют значения.
Битовая маска, дающая информацию о режиме откры- того файла, содержит следующие биты:
Один из следующих битов должен быть выставлен:
/* прим. пер. в S_IFCHR установлен, если параметр handle указывает оригинале нет: */ на устройство (fstat);
S_IFREG установлен, если обычный файл определяет- ся параметром handle (fstat),или парамет- ром path (stat).
S_IFDIR установлен, если параметр path определяет директорию (stat);
Один или оба следующих бита должны быть выставле- ны:
S_IWRITE установлен, если пользователь имеет раз- решение на запись;
S_IREAD установлен, если пользователь имеет раз- решение на чтение.
Для функции stat битовая маска содержит также би- ты пользовательского выполнения; они устанавлива- ются в соответствии с расширением имени открытого файла. Битовая маска также имеет биты чтения/за- писи, они устанавливаются в соответствии с режи- мом доступа к файлу.
Возвращаемое Если информация об открытом файле была успешно по- значение лучена, функция возвращает 0. В случае ошибки (невозможно получить информацию), функция возвра- щает значение -1 и устанавливает переменную errno.
ENOENT - Файл или маршрут не найдены.
Переносимость stat доступна в системах UNIX и поддерживается стандартом ANSI C.
Смотрите также
Пример:
#include
#include
#include
#define FILENAME "TEST.$$$"
int main(void) { struct stat statbuf; FILE *stream; /* открыть файл для изменения */ if((stream = fopen(FILENAME,"w+")) == NULL) { fprintf(stderr,"Не могу открыть файл.\n"); return 1; } /* получить информацию о файле */ stat(FILENAME,&statbuf); fclose(stream); /* вывести полученную информацию */ 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; }