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

Здесь есть возможность читать онлайн «Нейл Мэтью - Основы программирования в Linux» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Санкт-Петербург, Год выпуска: 2009, ISBN: 2009, Издательство: «БХВ-Петербург», Жанр: Программирование, ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Основы программирования в Linux: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Основы программирования в Linux»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

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

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Основы программирования в Linux», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

fprintf(out, "\n");

do {

fflush(out);

selected = fgetc(in);

option = choices;

while (*option) {

if (selected == *option[0]) {

chosen = 1;

break;

}

option++;

}

if (!chosen) {

tputs(tparm(cursor, screenrow, screencol), 1, char_to_terminal);

fprintf(out, "Incorrect choice, select again\n");

}

} 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), то получите следующий вывод:

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

Интервал:

Закладка:

Сделать

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

Представляем Вашему вниманию похожие книги на «Основы программирования в Linux» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


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

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

x