-->

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

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

Основы программирования в Linux читать книгу онлайн

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

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

Перейти на страницу:

<b>#include &lt;curses.h&gt;</b>

<b>int mvwin(WINDOW *window_to move, int new_y, int new x);</b>

<b>int wrefresh(WINDOW *window_ptr);</b>

<b>int wclear(WINDOW *window_ptr);</b>

<b>int werase(WINDOW *window_ptr);</b>

<b>int touchwin(WINDOW *window_ptr);</b>

<b>int scrollok(WINDOW *window_ptr, bool scroll_flag);</b>

<b>int scroll(WINDOW *window_ptr);</b>

Функция

mvwin
перемещает окно по экрану. Поскольку окно целиком должно располагаться в области экрана, функция
mvwin
завершится аварийно, если вы попытаетесь переместить окно так, что какая-то его часть выйдет за пределы экрана.

Функции

wrefresh
,
wclear
и
werase
— просто обобщения функций, с которыми вы встречались ранее; они только принимают указатель
WINDOW
, поэтому могут ссылаться на конкретное окно, а не на окно stdscr.

Функция

touchwin
довольно специальная. Она информирует библиотеку curses о том, что содержимое окна, на которое указывает ее параметр, было изменено. Это означает, что curses всегда будет перерисовывать такое окно при следующем вызове функции
wrefresh
, даже если вы на самом деле не меняли содержимое этого окна. Эта функция очень полезна для определения отображаемого окна при наличии нескольких перекрывающихся окон, загромождающих экран.

Две функции

scroll
управляют прокруткой окна. Функция
scrollok
при передаче логического значения true (обычно ненулевого) включает прокрутку окна. По умолчанию окна не прокручиваются. Функция
scroll
просто прокручивает окно на одну строку вверх. В некоторые реализации библиотеки curses входит и функция
wsctl
, которая также принимает количество строк для прокрутки, которое может быть и отрицательным числом. Мы вернемся к прокрутке немного позже в этой главе.

А теперь выполните упражнение 6.4.

Упражнение 6.4. Управление множественными окнами

Теперь, зная, как управлять несколькими окнами, вы можете включить эти новые функции в программу multiw1.c. Для краткости проверка ошибок не приводится.

1. Как обычно, вставьте первыми отсортированные объявления:

#include &lt;unistd.h&gt;

#include &lt;stdlib.h&gt;

#include &lt;curses.h&gt;

int main() {

 WINDOW *new_window_ptr;

 WINDOW *popup_windov_ptr;

 int x loop;

 int y_loop;

 char a_letter = 'a';

 initscr();

2. Заполните базовое окно символами, обновляя физический экран, когда заполнен логический экран:

 move(5, 5);

 printw(&quot;%s&quot;, &quot;Testing multiple windows&quot;);

 refresh();

 for (y_loop = 0; y_loop &lt; LINES - 1; y_loop++) {

  for (x_loop = 0; x_loop &lt; COLS - 1; x_loop++) {

   mvwaddch(stdscr, y_loop, x_loop, a_letter);

   a_letter++;

   if (a_letter &gt; 'z') a_letter = 'a';

  }

 }

 /* Обновление экрана */

 refresh();

 sleep(2);

3. Теперь создайте окно 10×20 и вставьте в него текст перед прорисовкой окна на экране:

 new_window_ptr = newwin(10, 20, 5, 5);

 mvwprintw(new_window_ptr, 2, 2, &quot;%s&quot;, &quot;Hello World&quot;);

 mwwprintw(new_window_ptr, 5, 2, &quot;%s&quot;,

  &quot;Notice how very long lines wrap inside the window&quot;);

 wrefresh(new_window_ptr);

 sleep(2);

4. Измените содержимое фонового окна. Когда вы обновите экран, окно, на которое указывает

new_window_ptr
, будет затемнено:

 a_letter = '0';

 for (y_lоор = 0; y_lоор &lt; LINES - 1; y_lоор++) {

  for (х_lоор = 0; xloop &lt; COLS - 1; х_lоор++) {

   mvwaddch(stdscr, y_loop, х_lоор, a_letter);

   a_letter++;

   if (a_letter &gt; '9') a_letter = '0';

  }

 }

 refresh();

 sleep(2);

5. Если вы выполните вызов для обновления нового окна, ничего не изменится, поскольку вы не изменяли новое окно:

 wrefresh(new_window_ptr);

 sleep(2);

6. Но если вы сначала воспользуетесь функцией

touchwin
и заставите библиотеку curses думать, что окно было изменено, следующий вызов функции wrefresh снова отобразит новое окно на переднем плане.

 touchwin(new_window_ptr);

 wrefresh(new_window_ptr);

 sleep(2);

7. Добавьте еще одно накладывающееся окно с рамкой вокруг него.

 popup_window_ptr = newwin(10, 20, 8, 8);

 box(popup_window_ptr, '|', '-');

 mvwprintw(popup_window_ptr, 5, 2, &quot;%s&quot;, &quot;Pop Up Window!&quot;);

 wrefresh(popup_window_ptr);

 sleep(2);

8. Поиграйте с новыми всплывающими окнами перед их очисткой и удалением.

 touchwin(new_window_ptr);

 wrefresh(new_window_ptr);

 sleep(2);

 wclear(new_window_ptr);

Перейти на страницу:
Комментариев (0)
название