Функция Получает информацию о файле.
Синтаксис #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.
Смотрите также accesschmodfstatstat
Пример:
#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;
}