Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
rudenko_c_tasks.doc
Скачиваний:
54
Добавлен:
12.11.2019
Размер:
666.62 Кб
Скачать

10.3.2 Дополнительные средства ввода-вывода

int link ( char name1, char name2)

с физическим файлом может быть связано несколько имен. Первое имя файл получает при создании. Последующие имена ( ссылки ) образуются при помощи системной функции link. Параметр name2 – это альтернативное имя для файла с именем name1.

Функция link возвращает 0 либо –1, если создать ссылку не удалось (например, файл name2 уже существует).

int unlink ( char name)

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

Функция unlink возвращает 0 либо –1, если файла не существует или он не может быть уничтожен.

long lseek ( int fd, long offset, int origin)

ввод-вывод обычно бывает последовательным, т.е. каждая очередная операция чтения-записи начинается с позиции, следующей за обработанной в предыдущей операции. Однако , при желании, можно читать файл в произвольном порядке. Системная функция lseek предоставляет способ передвигаться по файлу, не читая и не записывая данные.

Функция lseek в файле с дескриптором fd устанавливает текущую позицию, смещая ее на величину offset относительно места, задаваемого значением origin. Если origin равно 0, то смещение происходит от начала файла; если 1 – относительно текущей позиции; если 2 – от конца файла. Например, если требуется добавить данные в конец файла, то прежде чем что-либо записывать в файл, нужно при помощи lseek(fd, 0L, 2) найти конец файла. Чтобы вернуться в начало файла, надо выполнить lseek(fd, 0L, 0).

Возвращаемое функцией lseek значение имеет тип long и равно установленной текущей позиции файла (последующие чтение или запись будут производиться с этой позиции). В случае ошибки lseek выдает -1. Благодаря lseek с файлами можно работать как с большими массивами с замедленным доступом.

int stat ( char name, struct stat buf)

с помощью функции stat можно получить информацию о состоянии файла name. Структура stat описана в <sys/stat.h>. В этом файле также определены константы, которые можно использовать при работе с полями структуры stat.

struct stat

{ dev_t st_dev; / устройство /

ino_t st_ino; /номер inode /

unsigned short st_mode; / это поле определяет, является ли данный файл обычным файлом, оглавлением, специальным блочным или специальным литерным; кроме того, st_mode содержит биты, определяющие полномочия /

short st_nlink; / число связей /

short st_uid; / идентификатор владельца /

short st_gid; / идентификатор группы владельца /

dev_t st_rdev; / для специальных файлов /

off_t st_size; / размер файла в литерах /

time_t st_atime; / время последнего чтения из файла /

time_t st_mtime; / время последней записи в файл (или время его создания). На это поле не влияют изменения владельца, группы или полномочий/

time_ st_ctime; / это время устанавливается при записи в файл или при изменении владельца, группы или полномочий /

}

#define S_IFMT 0170000 / маска для выделения типа файла /

#define S_IFDIR 0040000 / оглавление-каталог /

#define S_IFCHR 0020000 / символьно-ориентированный /

#define S_IFBLK 0060000 / блочно-ориентированный /

#define S_IFREG 0100000 / обычный файл /

#define S_IREAD 0000400 / право на чтение для владельца /

#define S_IWRITE 0000200 / право на запись для владельца /

#define S_IEXEC 0000100 / право на выполнение для владельца /

Более подробную информацию о структуре stat и связанных с ней константах см. в файле <sys/stat.h>. Типы, подобные dev_t и ino_t, определены в <sys/types.h>.

Системный вызов stat по имени файла name возвращает полную информацию о нем, содержащуюся в inode, или –1 в случае ошибки.

Итак,

#include <sys/types.h>

#include <sys/stat.h>

struct stat stbuf;

char name = “my_file”;

stat( name, &stbuf);

заполняет структуру stbuf информацией о файле my_file.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]