□
□
Характер буферизации может быть изменен с помощью функций:
#include
void setbuf(FILE *stream, char *buf);
int setvbuf(FILE *stream, char *buf, int type, size_t size);
Функция stream
. В первом случае buf
должен указывать на буфер размером BUFSIZ
, во втором его значение должно быть равно NULL
.
Функция type
, который может принимать следующие значения:
_IOFBF | Полная буферизация |
_IOLBF | Построчная буферизация |
_IONBF | Отсутствие буферизации |
В случае полной или построчной буферизации аргумент size
определяет размер буфера, адресованного указателем buf
.
Каждый поток стандартной библиотеки представлен указателем на структуру FILE
, показанную на рис. 2.9, в которой хранится указатель на буфер _base
, указатель на следующий символ, подлежащий чтению или записи _ptr
, число байт в буфере _cnt
, указатель на файловый дескриптор _file
, с которым ассоциирован данный поток, а также флаги состояния потока _flag
. При создании буфера библиотека выбирает оптимальный размер для данного потока. Обычно этот размер равен значению поля st_blksize
структуры stat
, возвращаемой системным вызовом BUFSIZ
, определенное в файле
Рис. 2.9. Структуры данных потока
Связи
В метаданных каждого файла файловой системы UNIX хранится число связей, определяющее количество имен, которое имеет данный файл. Например, файлы /etc/init.d/lp (или /etc/lp), /etc/rc0.d/K201p, /etc/rc2.d/K201p и /etc/rc2.d/S801p имеют различные имена, но ссылаются на один и тот же физический файл (точнее, метаданные файла) и тем самым обеспечивают доступ к одним и тем же данным. В данном случае число связей файла равно 4. Каждый раз, когда одно из имен файла удаляется, число связей соответственно уменьшается. Когда оно достигнет нуля — данные файла будут удалены. Такой тип связи называется
Жесткая связь создается с помощью системного вызова
#include
int link(const char *existing, const char *new);
При этом будет образована новая запись каталога с именем new
и номером inode указывающим на метаданные файла existing
. Также будет увеличено число связей. Этим системным вызовом, в частности, пользуется команда
Для удаления жесткой связи используется системный вызов
#include
int unlink(const char *path);
Эту функцию вызывает команда
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии