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

на главную

Жанры

Разработка приложений в среде 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);

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

Ученичество. Книга 1

Понарошку Евгений
1. Государственный маг
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ученичество. Книга 1

Матабар III

Клеванский Кирилл Сергеевич
3. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар III

Кодекс Охотника. Книга XXIII

Винокуров Юрий
23. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXIII

Вопреки судьбе, или В другой мир за счастьем

Цвик Катерина Александровна
Любовные романы:
любовно-фантастические романы
6.46
рейтинг книги
Вопреки судьбе, или В другой мир за счастьем

Идеальный мир для Лекаря 23

Сапфир Олег
23. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 23

Довлатов. Сонный лекарь

Голд Джон
1. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Довлатов. Сонный лекарь

Мама из другого мира. Дела семейные и не только

Рыжая Ехидна
4. Королевский приют имени графа Тадеуса Оберона
Любовные романы:
любовно-фантастические романы
9.34
рейтинг книги
Мама из другого мира. Дела семейные и не только

Великий род

Сай Ярослав
3. Медорфенов
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Великий род

Проданная Истинная. Месть по-драконьи

Белова Екатерина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Проданная Истинная. Месть по-драконьи

Треск штанов

Ланцов Михаил Алексеевич
6. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Треск штанов

Лучший из худших

Дашко Дмитрий
1. Лучший из худших
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Лучший из худших

На границе империй. Том 8. Часть 2

INDIGO
13. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8. Часть 2

Гром над Академией Часть 3

Машуков Тимур
4. Гром над миром
Фантастика:
фэнтези
5.25
рейтинг книги
Гром над Академией Часть 3

Сила рода. Том 3

Вяч Павел
2. Претендент
Фантастика:
фэнтези
боевая фантастика
6.17
рейтинг книги
Сила рода. Том 3