» » » Нейл Мэтью - Основы программирования в Linux


Авторские права

Нейл Мэтью - Основы программирования в Linux

Здесь можно скачать бесплатно "Нейл Мэтью - Основы программирования в Linux" в формате fb2, epub, txt, doc, pdf. Жанр: Программное обеспечение, издательство «БХВ-Петербург», год 2009. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Нейл Мэтью - Основы программирования в Linux
Рейтинг:
Название:
Основы программирования в Linux
Автор:
Издательство:
«БХВ-Петербург»
Год:
2009
ISBN:
978-5-9775-0289-4
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Основы программирования в Linux"

Описание и краткое содержание "Основы программирования в Linux" читать бесплатно онлайн.



В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым.

Для начинающих Linux-программистов






Итак, выполните упражнение 4.2.

Упражнение 4.2. Функция getopt 

В этом упражнении вы используете функцию getopt; назовите новую программу argopt.c.

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>


int main(int argc, char *argv[]) {

 int opt;

 while ((opt = getopt(argc, argv, ":if:lr")) != -1) {

  switch(opt) {

  case 'i':

  case 'l':

  case 'r':

   printf("option: %c\n", opt);

   break;

  case 'f':

   printf("filename: %s\n", optarg);

   break;

  case ':':

   printf("option needs a value\n");

   break;

  case '?':

   printf("unknown option: %c\n", optopt);

   break;

  }

 }

 for (; optind < argc; optind++)

  printf("argument: %s\n", argv[optind]);

 exit(0);

}

Теперь, когда вы выполните программу, то увидите, что все аргументы командной строки обрабатываются автоматически:

$ ./argopt -i -lr 'hi there' -f fred.с -q

option: i

option: l

option: r

filename: fred.c

unknown option: q

argument: hi there

Как это работает

Программа многократно вызывает функцию getopt для обработки аргументов-опций до тех пор, пока не останется ни одного, в этот момент getopt вернет -1. Для каждой опции выбирается подходящее действие, включая обработку неизвестных опций и пропущенных значений. Если у вас другая версия getopt, то вы получите вывод, слегка отличающийся от показанного, — особенно сообщения об ошибках — но смысл будет понятен.

Когда все опции обработаны, программа просто выводит оставшиеся аргументы, как и раньше, но начиная с номера, хранящегося в переменной optind.

getopt_long

Многие приложения Linux принимают более информативные аргументы, чем использованные в предыдущем примере односимвольные опции. Библиотека С проекта GNU содержит версию функции getopt, названную getopt_long, которая принимает так называемые длинные аргументы, которые вводятся с помощью двойного дефиса.

Рассмотрим упражнение 4.3.

Упражнение 4.3. Функция getopt_long

Примените функцию getopt_long для создания новой версии примера программы, которая может вызываться с использованием длинных эквивалентов опций, например, следующих:

$ ./longopt --initialize --list 'hi there' --file fred.c -q

option: i

option: l

filename: fred.c

./longopt: invalid option --q

unknown option: q

argument: hi there

На самом деле и новые длинные опции, и исходные односимвольные можно смешивать. Длинным опциям также можно давать сокращенные названия, но они

должны отличаться от односимвольных опций. Длинные опции с аргументом можно задавать как единый аргумент в виде --опция= значение, как показано далее:

$ ./longopt --init -l --file=fred.с 'hi there'

option: i

option: l

filename: fred.с

argument: hi there

Далее приведена новая программа longopt.c, полученная из программы argopt.c с изменениями, обеспечивающими поддержку длинных опций, которые в тексте программы выделены цветом.

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>


#define _GNU_SOURCE

#include <getopt.h>


int main(int argc, char *argv[]) {

 int opt;

 struct option_longopts[] = {

  {"initialize", 0. NULL, 'i'},

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

  {"list", 0, NULL, 'l'},

 {0, 0, 0, 0}};

 while ((opt = getopt_long(argc, argv, ":if:lr, longopts, NULL)) != -1) {

  switch(opt) {

  case 'i':

  case 'l':

  case 'r':

   printf("option: %c\n", opt);

   break;

  case 'f':

   printf("filename: %s\n", optarg);

   break;

  case ':':

   printf("option needs a value\n");

   break;

  case '?':

   printf("unknown option: %c\n", optopt);

   break;

  }

 }

 for (; optind < argc; optind++)

  printf("argument: %s\n", argv[optind]);

 exit(0);

}

Как это работает

Функция getopt_long принимает два дополнительных параметра по сравнению с функцией getopt. Первый из них — массив структур, описывающий длинные опции и сообщающий функции getopt_long способ их обработки. Второй дополнительный параметр — адрес переменной, которая может использоваться как вариант optind, предназначенный для длинных опций; для каждой распознанной длинной опции ее номер в массиве длинных опций может быть записан в эту переменную. В данном примере вам не нужна эта информация, поэтому вы используете NULL в качестве значения второго дополнительного параметра.

Массив длинных опций состоит из ряда структур типа struct option, в каждой из которых описано требуемое поведение длинной опции. Массив должен заканчиваться структурой, содержащей все нули.

Структура длинной опции определена в заголовочном файле getopt.h и должна подключаться с помощью константы _GNU_SOURCE, определенной для того, чтобы разрешить использование функции getopt_long.

struct option {

 const char *name;

 int has_arg;

 int *flag;

 int val;

};

Элементы структуры описаны в табл. 4.1.


Таблица 4.1.

Параметр опции Описание name Название длинной опции. Сокращения будут приниматься до тех пор, пока они не создадут путаницы при определении названий других опций has_arg Принимает ли эта опция аргумент. Задайте 0 для опций без аргументов, 1 для опций, у которых должно быть значение, и 2 для опций с необязательным аргументом flag Задайте NULL, чтобы getopt_long вернула при обнаружении данной опции значение, заданное в val. В противном случае getopt_long возвращает 0 и записывает значение val в переменную, на которую указывает flag val Значение getopt_long для данной опции, предназначенное для возврата

Для получения сведений о других опциях, связанных с расширениями функции getopt в проекте GNU и родственных функциях, см. страницы интерактивного справочного руководства к функции getopt.

Переменные окружения

Мы обсуждали переменные окружения в главе 2. Это переменные, которые могут использоваться для управления поведением сценариев командной оболочки и других программ. Вы также можете применять их для настройки пользовательской среды. Например, у каждого пользователя есть переменная окружения HOME, определяющая его исходный каталог, стандартное место старта его или ее сеанса. Как вы видели, просмотреть переменные окружения можно из строки приглашения командной оболочки:

$ echo $НOМЕ

/home/neil

Вы также можете воспользоваться командой оболочки set для получения списка всех переменных окружения.

В спецификации UNIX определено множество стандартных переменных окружения, применяемых для самых разных целей, включая тип терминала, имена редакторов, установленных по умолчанию, названия часовых поясов и т.д. Программа на языке С может получить доступ к переменным окружения с помощью функций putenv и getenv.

#include <stdlib.h>

char *getenv(const char *name);

int putenv(const char *string);

Окружение состоит из строк вида имя=значение. Функция getenv ищет в окружении строку с заданным именем и возвращает значение, ассоциированное с этим именем. Она вернет NULL, если требуемая переменная не существует. Если переменная есть, но ее значение не задано, функция getenv завершится успешно и вернет пустую строку, в которой первый байт равен NULL. Строка, возвращаемая getenv, хранится в статической памяти, принадлежащей функции, поэтому для ее дальнейшего использования вы должны скопировать эту строку в другую, поскольку она может быть перезаписана при последующих вызовах функции getenv. 

Функция putenv принимает строку вида имя=значение и добавляет ее в текущее окружение. Она даст сбой и вернет -1, если не сможет расширить окружение из-за нехватки свободной памяти. Когда это произойдет, переменной errno будет присвоено значение ENOMEM.


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Основы программирования в Linux"

Книги похожие на "Основы программирования в Linux" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Нейл Мэтью

Нейл Мэтью - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Нейл Мэтью - Основы программирования в Linux"

Отзывы читателей о книге "Основы программирования в Linux", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.