# fileinfo

предоставляет информацию о файле

## Последовательность вызова

    [x,ierr] = fileinfo(files)

## Аргументы

files

  символьная строка или вектор-столбец строк, имя файла и путь до него

x

  вектор целых чисел размером 13 элементов, содержащий информацию, либо пустую матрицу, если файла не существует.

  Если `files` является вектор-столбцом строк, то `x` будет матрицей размером `m x 13`.

  Если файла с указанным именем не существует, то в качестве выходной информации будет возвращена строка из 13 элементов и в каждом элементе `Nan`.

ierr

  указатель ошибки, 0, если ошибки не произошло.

## Описание

`x = fileinfo(file)` возвращает:

x(1)

  Размер файла

x(2)

  Режимный код файла (десятичное значение)

x(3)

  Идентификатор пользователя

x(4)

  Идентификатор группы

x(5)

  Номер устройства

x(6)

  Дата последнего изменения данных

x(7)

  Дата последнего изменения статуса файла

x(8)

  Дата последнего доступа

x(9)

  Тип устройства (если инодное устройство)

x(10)

  Размер блока для ввода/вывода файловой системы (в Windows всегда 0)

x(11)

  Количество распределённых блоков (в Windows всегда 0)

x(12)

  Индексный дескриптор

x(13)

  Количество жёстких ссылок

## Ссылки

Эта функция является интерфейсом к C-функции `stat`.

Права обычно определяются в виде восьмеричных чисел: используйте для преобразования `dec2oct(x(2))`.

Числовой режим представляет собой от одной до четырёх восьмеричных цифр (0-7), полученных добавлением битов со значениями 4, 2 и 1. Любые опущенные цифры предполагаются предварёнными нулями. Первая цифра выбирает набор атрибутов идентификатора пользователя (4), группы пользователя (2) и sticky-бита (1). Вторая цифра выбирает права пользователя, который владеет файлом: чтение (4), запись (2) и исполнение (1); третье число выбирает права для других пользователей в группе файлов с теми же самыми значениями.

So, to check permissions, it is necessary to use masks. Let us take an example: In octal, x(2)=1664, so first digit corresponds to sticky attributes. The second indicates that file owner has permission of writing and reading. It is the same for other users in the file's group. Finally, others users has just right to read. To apply a mask, it is simpler to look at this octal in binary. So: `x`(2)= 1 110 110 100. To check if the owner has write permission, we must take a look at the second triplet: 110 and compare it with write permission 010. So, the operation is: 110 000 000 & 010 000 000. If result is not null (it is the case here), owner has write permission.

## Примеры

    w = fileinfo(SCI+'/etc/scilab.start')
    // права на файл
    dec2oct(w(2))
    // дата файла
    getdate(w(6))

    // Проверка прав на запись
    w = fileinfo(SCI+'/etc/scilab.start')

    S_IWRITE = 128; // маска прав на запись
    S_IEXEC = 64; // маска прав на исполнение
    S_IREAD = 256; // маска прав на чтение
    S_IFCHR = 8192; // маска прав директории

    if ( bitand( w(2), S_IWRITE ) <> 0) then
     disp('Для этого файла есть ПРАВО НА ЗАПИСЬ.');
    else
     disp('Для этого файла НЕТ ПРАВА НА ЗАПИСЬ.');
    end

    FILES = [SCI;SCIHOME;'несуществующий_файл';TMPDIR]
    [X,ERRS] = fileinfo(FILES)

## Смотрите также

- getdate
- file
- dispfiles
- newest
- isdir