В противоположность жестким связям, которые, как отмечалось в главе являются естественным способом адресации данных файла, в UNIX применяются
Символическая связь позволяет косвенно адресовать другой файл файловой системы. Системный вызов
#include
int symlink (const char *name, const char *synmame);
После создания символической связи, доступ к целевому файлу name может осуществляться с помощью symname
. При этом, функция
Таблица 2.11. Интерпретация символической связи различными системными вызовами
Системный вызов | Следует символической связи | Не следует символической связи |
---|---|---|
+ | ||
+ | ||
+ | ||
+ | ||
+ | ||
+ | ||
+ | ||
+ | ||
+ | ||
+ | ||
+ | ||
+ | ||
+ | ||
+ | ||
+ | ||
+ |
Для чтения содержимого файла — символической связи используется системный вызов
#include
int readlink(const char *path, void *buf, size_t bufsiz);
Аргумент path
содержит имя символической связи. В буфере buf
размером bufsiz
возвращается содержимое файла — символической связи.
Для иллюстрации к вышеприведенным рассуждениям приведем пример программы, которая сначала выводит содержимое символической связи, а затем — целевого файла, пользуясь в обоих случаях символическим именем:
#include
#include
#include
#include
#define BUFSZ 256
/* В качестве аргумента программа принимает имя
символической связи */
main(int argc, char *argv[]) {
char buf[BUFSZ+1];
int nread, fd;
/* Прочитаем содержимое самой символической связи */
printf("Читаем символическую связь\n");
nread = readlink(argv[1], buf, BUFSZ);
if (nread < 0) {
perror("readlink");
exit(1);
}
/* readlink не завершает строку '\0' */
printf("Символическая связь:\n %s\n", buf);
/* Теперь прочитаем содержимое целевого файла */
printf("Читаем целевой файл\n");
fd = open(argv[1], O_RDONLY);
if (fd < 0) {
perror("open");
exit(2);
}
nread = read(fd, buf, BUFSIZ);
if (nread < 0) {
perror("read");
exit(3);
}
buf[nread] = '\0';
printf("Целевой файл:\n %s\n", buf);
close(fd);
exit(0);
}
Перед тем как запустить программу, создадим символическую связь с файлом unix0.txt:
$ ln -s unix0.txt symlink.txt
$ ls -l
lrwxrwxrwx 1 andy user 10 Jan 6 09:54 symlink.txt -> unix0.txt
-rw-r--r-- 1 andy user 498 Jan 6 09:53 unix0.txt
$ a.out symlink.txt
Читаем символическую связь
Символическая связь:
unix0.txt
Читаем целевой файл
Целевой файл:
Начиная с 1975 года фирма AT&T начала предоставлять лицензии на
использование операционной системы как научно-образовательным
учреждениям, так и коммерческим организациям. Поскольку основная
часть системы поставлялась в исходных текстах, написанных на
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии