The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

fstat (2)
  • fstat (1) ( FreeBSD man: Команды и прикладные программы пользовательского уровня )
  • fstat (2) ( Solaris man: Системные вызовы )
  • fstat (2) ( FreeBSD man: Системные вызовы )
  • >> fstat (2) ( Русские man: Системные вызовы )
  • fstat (2) ( Linux man: Системные вызовы )
  • fstat (3) ( Solaris man: Библиотечные вызовы )
  • fstat (3) ( POSIX man: Библиотечные вызовы )
  •  

    НАЗВАНИЕ

    stat, fstat, lstat - считывает статус файла  

    СИНТАКСИС

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>

    int stat(const char *file_name, struct stat *buf);
    int fstat(int filedes, struct stat *buf);
    int lstat(const char *file_name, struct stat *buf);  

    ОПИСАНИЕ

    Эти функции возвращают информацию об указанном файле. Для этого не требуется иметь права доступа к файлу, хотя потребуются права поиска во всех каталогах, указанных в полном имени файла.

    stat возвращает информацию о файле file_name и заполняет буфер buf. lstat идентична stat, но в случае символьных сылок она возвращает информацию о самой ссылке, а не о файле, на который она указывает. fstat идентична stat, только возвращается информация об открытом файле, на который указывает filedes (возвращаемый open(2)), а не о file_name.

    Все эти функции возвращают структуру stat, которая содержит следующие поля:

    struct stat {
        dev_t         st_dev;      /* устройство */
        ino_t         st_ino;      /* inode */
        mode_t        st_mode;     /* режим доступа */
        nlink_t       st_nlink;    /* количество жестких ссылок */
        uid_t         st_uid;      /* идентификатор пользователя-владельца */
        gid_t         st_gid;      /* идентификатор группы-владельца */
        dev_t         st_rdev;     /* тип устройства */
                                   /* (если это устройство) */
        off_t         st_size;     /* общий размер в байтах */
        blksize_t     st_blksize;  /* размер блока ввода-вывода */
                                   /* в файловой системе */
        blkcnt_t      st_blocks;   /* количество выделенных блоков */
        time_t        st_atime;    /* время последнего доступа */
        time_t        st_mtime;    /* время последней модификации */
        time_t        st_ctime;    /* время последнего изменения */
    };
    

    Поле st_size задает размер файла (если он обычный или является символьной ссылкой) в байтах. Размер символьной ссылки - длина пути файла на который она сылается, без конечного NUL.

    Поле st_blocks задает размер файла в 512-байтных блоках. (Оно может быть меньше, чем st_size/512 например, когда в файле есть пропуски.) st_blksize задает "предпочтительный" размер блока для эффективного ввода/вывода в файловой системе. (Запись в файл более мелкими порциями может привести к некорректному чтению/изменению/повторной записи информации).

    Некоторые файловые системы Linux не реализуют все метки времени. Некоторые файловые системы позволяют обращаться к файлам так, что не происходит никаких изменений в поле st_atime. (См. 'noatime' в mount(8). Поле st_atime изменяется при доступе к файлу, например, при execve(2), mknod(2), pipe(2), utime(2) и read(2) (если прочитано больше нуля байтов). Другие функции, например, mmap(2), могут изменять, а могут и не изменять st_atime. Поле st_mtime изменяется при модификациях файла, например, при выполнении mknod(2), truncate(2), utime(2) и write(2) (если записано больше нуля байтов). Более того, поле st_mtime каталога изменяется при создании и удалении файлов в этом каталоге. Поле st_mtime не изменяется при изменении владельца, группы, количества жестких ссылок файла или режима доступа к нему. Поле st_ctime изменяется при записи или установке информации об inode (владельце, группе, количестве ссылок, режиме и т.д.).

    Указанные далее макросы POSIX проверяют, является ли файл:

    S_ISLNK(m)
    символьной ссылкой (Нет в POSIX.1-1996.)
    S_ISREG(m)
    обычным файлом
    S_ISDIR(m)
    каталогом
    S_ISCHR(m)
    символьным устройством
    S_ISBLK(m)
    блочным устройством
    S_ISFIFO(m)
    каналом FIFO
    S_ISSOCK(m)
    сокетом

    Описанные ниже флаги определены для поля st_mode:
    S_IFMT0170000битовая маска для полей типа файла
    S_IFSOCK0140000сокет
    S_IFLNK0120000символьная ссылка
    S_IFREG0100000обычный файл
    S_IFBLK0060000блочное устройство
    S_IFDIR0040000каталог
    S_IFCHR0020000символьное устройство
    S_IFIFO0010000канал FIFO
    S_ISUID0004000бит setuid
    S_ISGID0002000бит setgid (смотри ниже)
    S_ISVTX0001000бит принадлежности (смотри ниже)
    S_IRWXU00700маска для прав доступа пользователя
    S_IRUSR00400пользователь имеет право чтения
    S_IWUSR00200пользователь имеет право записи
    S_IXUSR00100пользователь имеет право выполнения
    S_IRWXG00070маска для прав доступа группы
    S_IRGRP00040группа имеет права чтения
    S_IWGRP00020группа имеет права записи
    S_IXGRP00010группа имеет права выполнения
    S_IRWXO00007маска прав доступа всех прочих (не находящихся в группе)
    S_IROTH00004все прочие имеют права чтения
    S_IWOTH00002все прочие имеют права записи
    S_IXOTH00001все прочие имеют права выполнения
    Бит setgid (S_ISGID) имеет несколько специальных применений: указывает, что для данного каталога используется семантика BSD; файлы, создаваемые в нем, наследуют группу-владельца от этого каталога, а не от фактической группы-владельца процесса, создавшего файл; а в подкаталогах данного каталога также будет установлен бит S_ISGID. Если файл не имеет бита выполнения группой (S_IXGRP), то бит setgid означает жесткую блокировку файла/записей. Бит принадлежности (S_ISVTX) каталога означает, что файлы в этом каталоге могут быть удалены или переименованы только владельцем файла, владельцем каталога и суперпользователем.  

    ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ

    В случае успеха возвращается ноль. При ошибке возвращается -1, а переменной errno присваивается номер ошибки.  

    НАЙДЕННЫЕ ОШИБКИ

    EBADF
    Неверный файловый описатель filedes.
    ENOENT
    Компонент полного имени файла file_name не существует или полное имя является пустой строкой.
    ENOTDIR
    Компонент пути не является каталогом.
    ELOOP
    При поиске файла встретилось слишком много символьных ссылок.
    EFAULT
    Некорректный адрес.
    EACCES
    Запрещен доступ.
    ENOMEM
    Недостаточно памяти в системе.
    ENAMETOOLONG
    Слишком длинное название файла.
     

    СООТВЕТСТВИЕ СТАНДАРТАМ

    Системные вызовы stat и fstat соответствуют SVr4, SVID, POSIX, X/OPEN, BSD 4.3. Системный вызов lstat соответствует 4.3BSD и SVr4. SVr4 документирует дополнительные коды ошибок fstat:EINTR,ENOLINKиEOVERFLOW.SVr4описываетдополнительныекодыошибок stat и lstat: EACCES, EINTR, EMULTIHOP, ENOLINK и EOVERFLOW. Использование полей st_blocks и st_blksize может быть затруднено при переносе их на другие платформы. (Эти поля описаны в BSD, но не в POSIX. Их работа различается в разных системах и, вероятно, даже в одной системе, если Вы пользуетесь настройками системы NFS).

    POSIX не описывает биты S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK, S_IFDIR, S_IFCHR, S_IFIFO, S_ISVTX, но вместо этого требует использовать макросы S_ISDIR() и т.п. Макросов S_ISLNK и S_ISSOCK нет в стандарте POSIX.1-1996, но оба они могут быть в следующем стандарте POSIX; бывший SVID 4v2, последний SVIDv2. Unix V7 (и более поздние системы) имеют S_IREAD, S_IWRITE, S_IEXEC, тогда как POSIX требует присутствия синонимов S_IRUSR, S_IWUSR, S_IXUSR.  

    ДРУГИЕ СИСТЕМЫ

    Значения, которые использовались или используются в различных системах:
    hexимяlsoctописание
    f000S_IFMT170000маска типа файла
    0000000000SCO: недействующий inode
    BSD: неизвестный тип
    в SVID-v2 и XPG2 как 0, так и 0100000
    означают обычный файл
    1000S_IFIFOp|010000поименованный канал FIFO
    2000S_IFCHRc020000символьной устройство (V7)
    3000S_IFMPC030000мультиплексированное символьное
    устройство (V7)
    4000S_IFDIRd/040000каталог (V7)
    5000S_IFNAM050000XENIX: именованый специальный файл с
    двумя подтипами и разными значениями
    st_rdev (1 и 2)
    0001S_INSEMs000001семафор XENIX, подтип IFNAM
    0002S_INSHDm000002разделяемые данные XENIX, подтип IFNAM
    6000S_IFBLKb060000блочное устройство (V7)
    7000S_IFMPB070000мультиплексированное блочное
    устройство (V7)
    8000S_IFREG-100000обычный файл (V7)
    9000S_IFCMP110000VxFS: сжатый файл
    9000S_IFNWKn110000сетевое устройство (HP-UX)
    a000S_IFLNKl@120000символьная ссылка (BSD)
    b000S_IFSHAD130000Solaris: теневой inode для ACL
    (не виден пользовательскими
    процессами)
    c000S_IFSOCKs=140000сокет (BSD; также "S_IFSOC" on VxFS)
    d000S_IFDOORD>150000Solaris: door
    e000S_IFWHTw%160000BSD whiteout (не используется для inode'ов)
    0200S_ISVTX001000Бит принадлежности: сохраняет код
    программы в файле подкачки даже после
    использования (V7)
    зарезервировано (SVID-v2)
    В некаталогах: не кэшировать этот
    файл (SunOS)
    В каталогах: флаг ограниченного
    удаления (SVID-v4.2)
    0400S_ISGID002000установить идентификатор группы при
    выполнении (V7)
    для каталогов: использовать семантику
    BSD для установки группы-владельца
    0400S_ENFMT002000жесткая блокировка файлов в стиле SysV
    (делит функции c S_ISGID)
    0800S_ISUID004000установить идентификатор пользователя
    при выполнении (V7)
    0800S_CDF004000каталог является файлом, зависящим от контекста (HP-UX)
    Бит принадлежности появился в Version 32V AT&T UNIX.  

    СМ. ТАКЖЕ

    chmod(2), chown(2), readlink(2), utime(2)


     

    Index

    НАЗВАНИЕ
    СИНТАКСИС
    ОПИСАНИЕ
    ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
    НАЙДЕННЫЕ ОШИБКИ
    СООТВЕТСТВИЕ СТАНДАРТАМ
    ДРУГИЕ СИСТЕМЫ
    СМ. ТАКЖЕ


    Поиск по тексту MAN-ов: 




      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor