Linux программирование в примерах
Linux программирование в примерах читать книгу онлайн
В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Вы можете изменить поведение по умолчанию, использовав в
optstring
optstring[0] == '+'
GNU
getopt()
getopt()
POSIXLY_CORRECT
optstring[0] == '-'
GNU
getopt()
optarg
Как и для стандартной
getopt()
optstring
:
getopt()
?
:
:
optstring
+
-
Наконец, если за символом опции в
optstring
argv
getopt()
optarg
while ((с = getopt(argc, argv, "ab::")) != -1)
...
для
-bYANKEES
b
optarg
YANKEES
-b
-b YANKEES
b
optarg
YANKEES
2.3.3. Длинные опции
Функция
getopt_long()
getopt_long_only()
-
getopt()
getopt_long()
getopt_long()
getopt_long_only()
#include <getopt.h> /* GLIBC */
int getopt_long(int argc, char *const argv[],
const char *optstring,
const struct option *longopts, int *longindex);
int getopt_long_only(int argc, char *const argv[],
const char *optstring,
const struct option *longopts, int *longindex);
Первые три аргумента те же, что и в
getopt()
struct option
longindex
longopts
2.3.3.1. Таблица длинных опций
Длинные опции описываются с помощью массива структур
struct option
struct option
<getopt.h>
struct option {
const char *name;
int has_arg;
int *flag;
int val;
};
Элементы структуры следующие:
const char *name
Это имя опции без предшествующих черточек, например, «
help
verbose
int has_arg
Переменная описывает, имеет ли длинная опция аргумент, и если да, какого вида этот аргумент. Значение должно быть одно из представленных в табл. 2.1. Макроподстановки являются некоторыми символическими именами для числовых значений, приведенных в таблице. Хотя числовые значения тоже работают, макроподстановки гораздо легче читать, и вы должны их использовать вместо соответствующих чисел в любом коде, который пишете.
int *flag
Если этот указатель равен NULL,
getopt_long()
val
val
getopt_long()
flag
int val
Если длинная опция обнаружена, это возвращаемое значение или значение для загрузки в
*flag
flag
flag
val
flag
val
optstring