Чтение онлайн

на главную - закладки

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

23: const char *path;

24: int mode = 0666;

25: char *end;

26: int args;

27:

28: /* Всегда необходимы, как минимум, тип создаваемого inode

29: и путь к нему. */

30: if (argc < 3) usage;

31:

32: path = argv[1];

33:

34: /*
второй аргумент указывает тип создаваемого узла */

35: if (!strcmp(argv[2], "b")) {

36: mode | = S_IFBLK;

37: args = 5;

38: } else if (!strcmp(argv[2] , "с") || !strcmp(argv[2], "u")) {

39: mode |= S_IFCHR;

40: args = 5;

41: } else if(!strcmp(argv[2], "p")) {

42: mode |= S_IFIFO;

43: args = 3;

44: } else {

45: fprintf(stderr, "неизвестный тип узла %s\n", argv[2]);

46: return 1;

47: }

48:

49: /* args сообщает, сколько аргументов ожидается, поскольку нам нужно

50: больше информации при создания устройств, чем именованных каналов*/

51: if (argc != args) usage;

52:

53: if (args == 5) {

54: /* получить старший и младший номера файла устройств,

55: который нужно создать */

56: major = strtol(argv[3], &end, 0);

57: if (*end) {

58: fprintf(stderr,"неверный старший номер %s\n", argv[3]);

59: return 1;

60: }

61:

62: minor = strtol(argv[4], &end, 0);

63: if (*end) {

64: fprintf(stderr, "неверный младший номер %s\n", argv[4]);

65: return 1;

66: }

67: }

68:

69: /* если создается именованный канал, то финальный параметр

70: игнорируется */

71: if (mknod(path, mode, makedev(major, minor))) {

72: fprintf(stderr, "вызов mknod не удался : %s\n", strerror(errno));

73: return 1;

74: }

75:

76: return 0;

77: }

11.4.2. Создание жестких ссылок

Когда множество имен файлов в файловой системе ссылаются на единственный inode, такие файлы называют жесткими ссылками (hard links) на него. Все эти имена

должны располагаться на одном физическом носителе (обычно это значит, что они должны быть на одном устройстве). Когда файл имеет множество жестких ссылок, все они равны — нет способа узнать, с каким именем первоначально был создан файл. Одно из преимуществ такой модели заключается в том, что удаление одной жесткой ссылки не удаляет файл с устройства — он остается до тех пор, пока все ссылки на него не будут удалены. Системный вызов
link
связывает новое имя файла с существующим inode.

#include <unistd.h>

int link(const char *origpath, const char *newpath);

Параметр

origpath
ссылается на существующее путевое имя, a
newpath
представляет собой путь для новой жесткой ссылки. Любой пользователь может создавать ссылку на файл, к которому у него есть доступ по чтению, до тех пор, пока он имеет право записи в каталоге, в котором ссылка создается, и право выполнения в каталоге, в котором находится
origpath
. Только пользователь root имеет право создавать жесткие ссылки на каталоги, но поступать так — обычно плохая идея, поскольку большинство файловых систем и некоторые утилиты не работают с ними достаточно хорошо — они полностью их отвергают.

11.4.3. Использование символических ссылок

Символические ссылки — это более гибкий тип ссылок, чем жесткие, но они не дают равноправного доступа к файлу, как это делают жесткие. В то время как жесткие ссылки разделяют один и тот же inode, символические ссылки просто указывают на другие имена файлов. Если файл, на который указывает символическая ссылка, удаляется, то она указывает на несуществующий файл, что приводит к появлению висячих ссылок. Использование символических ссылок между подкаталогами — обычная практика, и они могут также пересекать границы физических систем, чего не могут жесткие ссылки.

Почти все системные вызовы, которые обращаются к файлам по путевым именам, автоматически следуют по символическим ссылкам для поиска правильного inode. Ниже перечислены вызовы, которые не следуют по символическим ссылкам.

chown

lstat

readlink

rename

unlink

Символически ссылки создаются почти так же, как жесткие, но при этом используется системный вызов

symlink
.

#include <unistd.h>

int symlink(const char *origpath, const char *newpath);

Если вызов успешен, создается файл

newpath
как символическая ссылка, указывающая на
oldpath
(часто говорят, что
newpath
содержит в качестве своего значения
oldpath
).

Поиск значения символической ссылки немного сложнее.

#include <unistd.h>

int readlink(const char *pathname, char *buf, size_t bufsiz);

Поделиться:
Популярные книги

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

На Ларэде

Кронос Александр
3. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На Ларэде

Охота на попаданку. Бракованная жена

Герр Ольга
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Охота на попаданку. Бракованная жена

Кай из рода красных драконов

Бэд Кристиан
1. Красная кость
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кай из рода красных драконов

Хозяйка Проклятой Пустоши. Книга 2

Белецкая Наталья
2. Хозяйка Проклятой Пустоши
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка Проклятой Пустоши. Книга 2

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Потусторонний. Книга 2

Погуляй Юрий Александрович
2. Господин Артемьев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Потусторонний. Книга 2

Чапаев и пустота

Пелевин Виктор Олегович
Проза:
современная проза
8.39
рейтинг книги
Чапаев и пустота

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

Лютая

Шёпот Светлана Богдановна
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Лютая

Ведьмак (большой сборник)

Сапковский Анджей
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Ведьмак (большой сборник)

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4

Ученик

Губарев Алексей
1. Тай Фун
Фантастика:
фэнтези
5.00
рейтинг книги
Ученик

Начальник милиции. Книга 5

Дамиров Рафаэль
5. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 5