Книга: 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() обеспечивает отображение аргументов в стиле, подходящем для текущей локали; подробности сейчас несущественны.)

Оглавление книги


Генерация: 1.166. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз