Книга: Linux программирование в примерах
5.1.3.1. Программа GNU link
5.1.3.1. Программа GNU link
Программа ln
сложная и большая. Однако, GNU Coreutils содержит несложную программу link
, которая просто вызывает link()
со своими двумя аргументами. Следующий пример показывает код из файла link.с
, не относящиеся к делу части удалены. Номера строк относятся к действительному файлу.
20 /* Обзор реализации:
21
22 Просто вызывает системную функцию 'link' */
23
/* ...Операторы #include для краткости опущены... */
34
35 /* Официальное имя этой программы (например, нет префикса 'g'). */
36 #define PROGRAM_NAME "link"
37
38 #define AUTHORS "Michael Stone"
39
40 /* Имя, под которым была запущена данная программа. */
41 char *program_name;
42
43 void
44 usage(int status)
45 {
/* ... для краткости опущено... */
62 }
63
64 int
65 main(int argc, char **argv)
66 {
67 program_name = argv[0];
68 setlocale(LC_ALL, "");
69 bindtextdomain(PACKAGE, LOCALEDIR);
70 textdomain(PACKAGE);
71
72 atexit(close_stdout);
73
74 parse_long_options(argc, argv, PROGRAM_NAME, GNU_PACKAGE,
75 VERSION, AUTHORS, usage);
76
77 /* Вышеприведенное обрабатывает --help и --version.
78 Поскольку других вызовов getopt нет, обработать здесь '--'. */
79 if (1 < argc && STREQ(argv[1], "--"))
80 {
81 --argc;
82 ++argv;
83 }
84
85 if (argc < 3)
86 {
87 error(0, 0, _("too few arguments"));
88 usage(EXIT_FAILURE);
89 }
90
91 if (3 < argc)
92 {
93 error(0, 0, _("too many arguments"));
94 usage(EXIT_FAILURE);
95 }
96
97 if (link(argv[1], argv[2]) != 0)
98 error(EXIT_FAILURE, errno, _("cannot create link %s to %s"),
99 quote_n(0, argv[2]), quote_n(1, argv[1]));
100
101 exit(EXIT_SUCCESS);
102 }
Строки 67–75 являются типичным шаблоном Coreutils, устанавливающими интернациональные настройки, выход по завершении и анализ аргументов. Строки 79–95 гарантируют, что link
вызывается лишь с двумя аргументами. Сам системный вызов link()
осуществляется в строке 97 (Функция quote_n()
обеспечивает отображение аргументов в стиле, подходящем для текущей локали; подробности сейчас несущественны.)
- Appendix I. GNU General Public License
- 8.11. Функция readlink(): чтение символических ссылок
- Appendix E. Other resources and links
- Appendix H. GNU Free Documentation License
- Программа «Тайный покупатель»
- Программа Victoria
- Подпрограмма обработки прерывания
- Магическая программа, или Беспорядок по расписанию
- 2.3 Executable and Linking Format
- Что делать, если вместо русских букв в программах – непонятные символы?
- Как называется программа, которая устанавливает Windows за 5 минут?
- Программа shmget