-->

Linux программирование в примерах

На нашем литературном портале можно бесплатно читать книгу Linux программирование в примерах, Роббинс Арнольд-- . Жанр: Программирование / ОС и Сети. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Linux программирование в примерах
Название: Linux программирование в примерах
Дата добавления: 16 январь 2020
Количество просмотров: 545
Читать онлайн

Linux программирование в примерах читать книгу онлайн

Linux программирование в примерах - читать бесплатно онлайн , автор Роббинс Арнольд

В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.

 

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

1 ... 12 13 14 15 16 17 18 19 20 ... 253 ВПЕРЕД
Перейти на страницу:

Таблица 2.1. Значения для

has_arg

Макроподстановка Числовое значение Смысл
no_argument
0 Опция не принимает аргумент
required_argument
1 Опции требуется аргумент
optional_argument
2 Аргумент опции является необязательным

У каждой длинной опции есть один такой элемент с соответствующими заполненными значениями. В последнем элементе массива все значения должны быть равны нулю. Нет необходимости сортировать массив:

getopt_long()
осуществляет линейный поиск. Однако, сортировка его по длинным именам может упростить его чтение для программиста.

При первой встрече использование

flag
и
val
кажется сбивающим с толку. Давайте сделаем на время шаг назад и рассмотрим, почему это работает именно таким способом В большинстве случаев, обработка опций заключается в установке значений различных флаговых переменных при обнаружении различных символов опций, наподобие этого:

while ((с = getopt(argc, argv, ":af:hv")) != -1) {

 switch (с) {

 case 'a':

  do_all = 1;

  break;

 case 'f':

  myfile = optarg;

  break;

 case 'h':

  do_help = 1;

  break;

 case 'v':

  do_verbose = 1;

  break;

 ... /* Здесь обработка ошибок */

 }

}

Когда

flag
не равен NULL,
getopt_long()
устанавливает значения переменных за вас. Это снижает число операторов
case
в предыдущем
switch
с трех до одного. Вот пример таблицы длинных опций и код для работы с ней:

int do_all, do_help, do_verbose; /* флаговые переменные */

char *my_file;

struct option longopts[] = {

 { "all", no_argument, &do_all, 1 },

 { "file", required_argument, NULL, 'f' },

 { "help", no_argument, &do_help, 1 },

 { "verbose", no_argument, &do_verbose, 1 },

 { 0, 0, 0, 0 }

};

while ((с =

 getopt_long(argc, argv, ":f:", longopts, NULL)) != -1) {

 switch (c) {

 case 'f':

  myfile = optarg;

  break;

 case 0:

  /* getopt_long() устанавливает значение переменной,

     просто продолжить выполнение */

  break;

 ... /* Здесь обработка ошибок */

 }

}

Обратите внимание, что значение, переданное аргументу

optstring
, не содержит больше '
a
', '
h
' или '
v
'. Это означает, что соответствующие короткие опции неприемлемы. Чтобы разрешить как длинные, так и короткие опции, вам придется восстановить в
switch
соответствующие
case
из первого примера.

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

flag
NULL, а в
val
соответствующий единичный символ.

2.3.3.2. Длинные опции в стиле POSIX

Стандарт POSIX резервирует опцию

-W
для специфических для производителя возможностей. Поэтому по определению
-W
непереносимо между различными системами.

Если за

W
в аргументе
optstring
следует точка с запятой (обратите внимание не двоеточие),
getopt_long()
рассматривает
-Wlongopt
так же, как
--longopt
. Соответственно в предыдущем примере измените вызов следующим образом:

while ((с =

 getopt_long(argc, argv, ":f:W;", longopts, NULL)) != -1) {

С этим изменением

-Wall
является тем же, что и
--all
, a
-Wfile=myfile
тем же, что
--file=myfile
. Использование точки с запятой позволяет программе использовать при желании
-W
в качестве обычной опции. (Например, GCC использует ее как нормальную опцию, тогда как
gawk
использует ее для совместимости с POSIX.)

2.3.3 3. Сводка возвращаемых значений

getopt_long()

Теперь должно быть ясно, что

getopt_long()
предоставляет гибкий механизм для разбора опций. В табл. 2.2 приведена сводка всех возможных возвращаемых значений функции и их значение.

Таблица 2.2. Возвращаемые значения

getopt_long()

Возвращаемый код Значение
0
getopt_long()
установила флаг, как указано в таблице длинных опций
1
optarg
указывает на простой аргумент командной строки
'?' Недействительная опция
' ' Отсутствующий аргумент опции
'x' Символ опции 'x'
-1 Конец опций
1 ... 12 13 14 15 16 17 18 19 20 ... 253 ВПЕРЕД
Перейти на страницу:
Комментариев (0)
название