CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по функциям C/C++
fstat
fstat
Функция Получает информацию об открытом файле. Синтаксис #include <sys\stat.h> int fstat(char * handle, struct stat * buff) Файл, содержащий sys\stat.h прототип Описание Функция fstat записывают информацию об открытом файле (или директории), связанным с дескриптором 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 - Неверный номер файла. Смотрите также access, chmod, stat. Пример: #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; }