Операционная система Linux. Докторов А.Е. - 12 стр.

UptoLike

Составители: 

Параметр fd является указателем на массив из двух целых перемен-
ных. При нормальном завершении вызова, в первый элемент массива
(fd[0]) будет занесен файловый дескриптор, соответствующий входному
потоку данных канала и позволяющий выполнять только операцию чте-
ния, а во второй элемент массива (fd[1]) будет занесен файловый дескрип-
тор, соответствующий выходному потоку данных и позволяющий выпол-
нять только операцию записи. Системный вызов возвращает значение
равное 0 при нормальном завершении и значение1 при возникновении
ошибок.
Системный вызов организует выделение области памяти под буфер
и указатели и заносит информацию, соответствующую входному и выход-
ному потокам данных, в два элемента таблицы открытых файлов, связы-
вая тем самым с каждым каналом два файловых дескриптора. Для выпол-
нения операций передачи данных можно использовать системные вызовы
read() и write(). По окончании использования входного или/и выходного
потока данных, нужно закрыть соответствующий поток с помощью сис-
темного вызова close(). Необходимо отметить, что, когда все процессы,
использующие pipe, закрывают все ассоциированные с ним файловые де-
скрипторы, операционная система ликвидирует pipe.
Достаточно яркой иллюстрацией действий по созданию канала, за-
писи в него данных, чтению из него и освобождению выделенных ресур-
сов может служить программа, организующая работу с каналом в рамках
одного процесса, приведенная ниже.
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main(){
intfd[2J;
size_t size;
char string[] = "Hello, world!";
char resstring[14];
30
Обратите внимание на то, что у файла newl тот же inode (2655)
и совпадает время создания. В третьей колонке число 2 показывает коли-
чество ссылок на файл.
Измените содержимое файла newl и убедитесь, что файлы txtl
и newl это один и тот же файл на диске, только у него два имени. Также
проверьте, что жесткая ссылка не нарушается при перемещении файлов по
каталогам, а также то, что нельзя делать жесткие ссылки на каталоги.
Символьную ссылку можно делать как на файлы, так и на каталоги.
Например, можно сделать ссылку на файл txt2.
ln s 2 new2
Результатом будет новый файл со своим inode и временем создания.
Количество ссылок на файл txt2 не изменится. Размер файла соответствует
длине имени файла, на который делается ссылка. Обращение к файлу
new2 будет переадресовано на файл txt2.
2887 Irwxrwxrwx 1 root root 1 20091012 08:23 new2 > 2
Можно даже сделать символьную связь из каталога на сам этот каталог.
Рассмотрите, что произойдет при многократном переходе в этот каталог.
ln s ../new newdir
Проверьте глубину символьных связей в данной системе. Найдите
места расположения ссылок на компилятор с языка Си и расположение
остальных каталогов и файлов, относящихся к компилятору.
3. Монтирование файловых систем.
Видимое пользователю дерево каталогов образуется по следующей
схеме. Одну из доступных файловых систем ядро считает корневой. Эта
файловая система монтируется на корневой каталог «/», в результате чего
ее содержимое становится доступно в виде дерева каталогов, растущего
непосредственно из корневого. Любой из каталогов текущего дерева мо-
жет служить точкой монтирования другой файловой системы. После вы-
полнения команды вида mount файлдырка каталог, например,
11