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

Тут можно читать онлайн Нейл Мэтью - Основы программирования в Linux - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство «БХВ-Петербург», год 2009. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Основы программирования в Linux
  • Автор:
  • Жанр:
  • Издательство:
    «БХВ-Петербург»
  • Год:
    2009
  • Город:
    Санкт-Петербург
  • ISBN:
    978-5-9775-0289-4
  • Рейтинг:
    4/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

Основы программирования в Linux - описание и краткое содержание, автор Нейл Мэтью, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

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

Основы программирования в Linux - читать онлайн бесплатно полную версию (весь текст целиком)

Основы программирования в Linux - читать книгу онлайн бесплатно, автор Нейл Мэтью
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

}

} while (!chosen);

tputs(clear, 1, char_to_terminal);

return selected;

}

int char_to_terminal(int char_to_write) {

if (output_stream) putc(char_to_write, output_stream);

return 0;

}

Сохраните эту программу как menu5.с.

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

Переписанная функция getchoiceвыводит то же меню, что и в предыдущих примерах, но подпрограммы вывода изменены так, чтобы можно было воспользоваться характеристиками из базы данных terminfo. Если вы хотите видеть на экране сообщение "You have chosen:" дольше, чем одно мгновение перед очисткой экрана и подготовкой его к следующему выбору пункта меню, добавьте в функцию mainвызов sleep:

do {

choice = getchoice("Please select an action", menu, input, output);

printf("\nYou have chosen: %c\n", choice);

sleep(1);

} while (choice != 'q');

Последняя функция в этой программе char_to_terminalвключает в себя вызов функции putc, которую мы упоминали в главе 3.

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

Обнаружение нажатий клавиш

Пользователи, программировавшие в ОС MS-DOS, часто ищут в ОС Linux эквивалент функции kbhit, которая определяет, была ли нажата клавиша, без реального ее считывания. К сожалению, их поиски оказываются безуспешными, поскольку прямого аналога нет. Программисты в среде UNIX не ощущают этого отсутствия, т.к. UNIX запрограммирована так, что программы очень редко (если когда-либо вообще) озабочены ожиданием события. Поскольку это обычный способ применения kbhit, ее нехватка редко ощущается в системах UNIX и Linux.

Однако, когда вы переносите программы из MS-DOS, часто удобно эмулировать функцию kbhit, которую можно применять на деле в неканоническом режиме ввода (упражнение 5.7).

Упражнение 5.7. Исключительно ваша собственная kbhit

1. Начните со стандартной заголовочной информации и пары структур для установки параметров терминала. peek_characterприменяется для проверки нажатия клавиши. Далее описываются функции, которые будут использоваться позже:

#include

#include

#include

#include

#include

#include

static struct termios initial_settings, new_settings;

static int peek_character = -1;

void init_keyboard();

void close_keyboard();

int kbhit();

int readch();

2. Функция main вызывает функцию init_keyboardдля настройки терминала, затем выполняет цикл один раз в секунду, каждый раз вызывая в нем функцию kbhit. Если нажата клавиша , функция close_keyboardвосстанавливает нормальный режим и программа завершается:

int main() {

int ch = 0;

init_keyboard();

while (ch != 'q') {

printf("looping\n");

sleep(1);

if (kbhit()) {

ch = readch();

printf("you hit %c\n", ch);

}

}

close_keyboard();

exit(0);

}

3. Функции init_keyboardи close_keyboardнастраивают терминал в начале и конце программы:

void init_keyboard() {

tcgetattr(0, &initial_settings);

new_settings = initial_settings;

new_settings.c_lflag &= ~ICANON;

new_settings.c_lflag &= ~ECHO;

new_settings.c_lflag &= ~ISIG;

new_settings.c_cc[VMIN] = 1;

new_settings.c_cc[VTIME] = 0;

tcsetattr(0, TCSANOW, &new_settings);

}

void close_keyboard() {

tcsetattr(0, TCSANOW, &initial_settings);

}

4. Теперь функция, проверяющая нажатие клавиши:

int kbhit() {

char ch;

int nread;

if (peek_character != -1) return 1;

new_settings.c_cc[VMIN] = 0;

tcsetattr(0, TCSANOW, &new_settings);

nread = read(0, sch, 1);

newrsettings.c_cc[VMIN] = 1;

tcsetattr(0, TCSANOW, &new_settings);

if (nread == 1) {

peek_character = ch;

return 1;

}

return 0;

}

5. Нажатый символ считывается следующей функцией readch, которая затем восстанавливает значение -1 переменной peek_characterдля выполнения следующего цикла:

int readch() {

char ch;

if (peek_character != -1) {

ch = peek_character;

peek_character = -1;

return ch;

}

read(0, &ch, 1);

return ch;

}

Когда вы выполните программу (kbhit.c), то получите следующий вывод:

$ ./kbhit

looping

looping

looping

you hit h

looping

looping

looping

you hit d

looping

you hit q

$

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

Терминал настраивается в функции init_keyboardна считывание одного символа ( MIN=1, TIME=0). Функция kbhitизменяет это поведение на проверку ввода и его немедленный возврат ( MIN=0, TIME=0) и затем восстанавливает исходные установки перед завершением.

Обратите внимание на то, что вы должны считать символ нажатой клавиши, но сохраняете его локально, готовые вернуть символ в вызывающую программу по ее требованию.

Виртуальные консоли

ОС Linux предоставляет средство, называемое виртуальными консолями. Экран, клавиатуру и мышь одного ПК может использовать ряд терминальных устройств, доступных на этом компьютере. Обычно установка ОС Linux рассчитана на использование от 8 до 12 виртуальных консолей. Виртуальные консоли становятся доступными благодаря символьным устройствам /dev/tty N , где N — номер, начинающийся с 1.

Если вы регистрируетесь в вашей системе Linux в текстовом режиме, как только система активизируется, вам будет предложено регистрационное приглашение. Далее вы регистрируетесь с помощью имени пользователя и пароля. В этот момент используемое вами устройство — первая виртуальная консоль, терминальное устройство /dev/tty1.

С помощью команд whoи psвы можете увидеть, кто зарегистрировался и какие командная оболочка и программы выполняются на этой виртуальной консоли:

$ who

neil tty1 Mar 8 18:27

$ ps -e

PID TTY TIME CMD

1092 tty1 00:00:00 login

1414 tty1 00:00:00 bash

1431 tty1 00:00:00 emacs

Из этого укороченного вывода видно, что пользователь neil зарегистрировался и запустил редактор Emacs на консоли ПК, устройстве /dev/tty1.

Обычно ОС Linux запускается с процессом getty, выполняющимся на первых шести виртуальных консолях, поэтому есть возможность зарегистрироваться шесть раз, используя одни и те же экран, клавиатуру и мышь. Увидеть эти процессы можно с помощью и команды ps:

$ ps -а

PID TTY TIME CMD

1092 tty1 00:00:00 login

1093 tty2 00:00:00 mingetty

1094 tty3 00:00:00 mingetty

1095 tty4 00:00:00 mingetty

1096 tty5 00:00:00 mingetty

1097 tty6 00:00:00 mingetty

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

Переключаться между виртуальными консолями можно с помощью комбинации клавиш ++N >, где N — номер виртуальной консоли, на которую вы хотите переключиться. Таким образом, для того чтобы перейти на вторую виртуальную консоль, нажмите ++, и ++, чтобы вернуться на первую консоль. (При переключении из регистрации в текстовом режиме, а не графическом, также работает комбинация клавиш +N >.)

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Нейл Мэтью читать все книги автора по порядку

Нейл Мэтью - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Основы программирования в Linux отзывы


Отзывы читателей о книге Основы программирования в Linux, автор: Нейл Мэтью. Читайте комментарии и мнения людей о произведении.


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

Напишите свой комментарий
x