Главная страница
Навигация по странице:

  • BOOL AllocConsole(VOID);

  • BOOL FreeConsole(VOID); Чтение заголовка окна консоли: DWORD GetConsoleTitle(LPTSTR ipConsoleTitle, Dword nSize); Установка заголовка окна консоли: BOOL

  • WriteConsole , ReadConsole , WriteFile и ReadFile

  • CONTROL+H (для стирания символа) или CONTROL+U

  • Robert Love

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


    Скачать 0.94 Mb.
    НазваниеПрограммирование консольных приложений Что из себя представляет консоль и зачем она нужна
    Анкорпрограммирование консольных приложений
    Дата26.11.2022
    Размер0.94 Mb.
    Формат файлаpdf
    Имя файла10.pdf
    ТипДокументы
    #813424

    «Программирование консольных приложений»

    Что из себя представляет консоль и зачем она нужна

    Консолью называется интерфейс, который используется приложением для ввода – вывода текстовой информации
    Пример работы простейшего консольного приложения

    Немного о структуре консоли:

    Консоль состоит из одного входного буфера и одного или нескольких буферов экрана.

    Входной буфер содержит информацию о событиях ввода.

    Буфер экрана содержит информацию для вывода в окно.

    Консоль обеспечивает два уровня ввода-вывода текстовой информации: высокий и низкий.

    Функции высокого уровня обеспечивают ввод-вывод символов с консоли, игнорируя остальные события.

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

    Входной буфер консоли:

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

    Ввод с клавиатуры

    Ввод с мыши

    Изменение размеров окна

    Изменение фокуса ввода

    События связанные с меню
    Каждому событию ввода в очереди сообщений соответствует запись типа INPUT_RECORD
    Структура INPUT_RECORD

    Структура для записи для ввода с клавиатуры :

    Структура записи:

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

    Структура для записи для ввода с мыши :

    Структура записи:

    Флаги поля dwButtonState

    Флаги поля dwEventFlags

    Буфер обмена и буфер экрана:

    Буфер обмена – это место в оперативной памяти
    компьютера, предназначенное для промежуточного хранения любого вида информации

    Буфер экрана является двумерным массивом, элементы которого представляют собой записи типа:

    Работа с консолью:

    Процесс может быть связан только с одной консолью. Новая консоль может создаваться одним из следующих двух способов:

    При создании консольного процесса командой CreateProcess нужно установить флаг CREATE_NEW_CONSOLE

    Использование функции AllocConsole, которая имеет следующий прототип:
    BOOL AllocConsole(VOID);

    В обоих этих случаях заголовок окна консоли, его параметры, а также цвет фона и цвет текста задаются следующими полями структуры STARTUPINFO:

    Некоторые функции по работе с консолью:

    Освобождение консоли:
    BOOL FreeConsole(VOID);

    Чтение заголовка окна консоли:
    DWORD GetConsoleTitle(LPTSTR ipConsoleTitle, Dword nSize);

    Установка заголовка окна консоли:
    BOOL
    SetConsoleTitle(LPCTSTR ipConsoleTitle);

    Определение максимального размера окна:
    COORD GetLargestConsoleWindowSize(HANDLE hConsoleOutput);

    Установка координат окна:

    Установить окно консоли относительно буфера экрана можно вызовом функции
    SetConsoleWindowInfo
    :
    Для задания левого верхнего и правого нижнего углов окна используются поля структуры
    SMALL_RECT

    Ввод и вывод на консоль:

    К функциям ввода-вывода высокого уровня относятся следующие функции:
    WriteConsole
    ,
    ReadConsole
    ,
    WriteFile
    и
    ReadFile

    Для чтения строки символов из входного буфера консоли экрана используется функция
    ReadConsole

    Для записи строки символов в буфер экрана используется функция
    WriteConsole

    Командная строка в линукс:

    Когда в ответ на приглашение вводится команда, оболочка выполняет соответствующую этой команде программу. Например, когда вводится команда
    ls
    , оболочка выполняет служебную программу
    (утилиту) по имени
    ls

    Синтаксис командной строки:

    Синтаксис командной строки определяет порядок следования и разделения элементов командной строки. При нажатии клавиши ВВОД (после окончания набора команды) оболочка сканирует командную строку, проверяя в ней правильность использованного синтаксиса.

    Как правило, для командной строки используется следующий синтаксис: команда
    [арг1][арг2] … [аргn] ВВОД

    Элементы командной строки должны быть отделены друг от друга одним или несколькими пробелами. Команда — это имя команды, арг1–аргn — аргументы, а
    ВВОД — это клавиша, нажатие которой завершает ввод командной строки.

    Обработка командной строки:

    По мере ввода командной строки имеющийся в Linux драйвер устройства tty (входящий в ядро Linux) проверяет каждый символ, чтобы узнать, не нужно ли ему предпринять какие-либо немедленные действия. После нажатия комбинации клавиш
    CONTROL+H
    (для стирания символа) или
    CONTROL+U
    (для удаления всей строки) драйвер устройства тут же приводит командную строку в нужное состояние.

    Когда оболочка обрабатывает командную строку, она рассматривает ее целиком, а затем производит ее разбор (разбиение) на составные части

    Выполнение командной строки:

    Если оболочка найдёт исполняемый файл с таким же именем, как у введенной команды, она запустит новый процесс. Процесс — это выполнение команды системой Linux .

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

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

    Поскольку оболочка не обрабатывает аргументы командной строки, а просто передает их вызываемой программе, у нее нет возможности узнать, подходит ли тот или иной ключ (или другой аргумент) данной программе.

    Стандартный ввод и стандартный вывод:

    Стандартный вывод — это место, куда программа может отправить информацию, например текст. Программа никогда не «знает», куда уходит информация, отправленная на стандартный вывод.

    Стандартный ввод — это место, откуда программа получает информацию. Так же, как и со стандартным выводом, программа никогда не «знает», откуда поступает информация. По умолчанию информация поступает с клавиатуры.

    Экран в качестве файла:

    Помимо обычных файлов, файлов каталогов, а также жестких и мягких ссылок в Linux и в OS
    X имеется дополнительный тип файла: файл устройства. Этот файл находится в файловой структуре Linux, обычно в каталоге /dev, и представляет внешнее устройство, например экран и клавиатуру, принтер или дисковый привод.

    Имя устройства, которое утилита who выводит после вашего имени пользователя — это имя файла экрана и клавиатуры. Например, когда утилита who отображает имя устройства pts/4, то полное имя экрана и клавиатуры — /dev/pts/4.

    Перенаправление стандартного вывода:

    Символ перенаправления вывода (>) заставляет оболочку перенаправить вывод команды в указанный файл, а не на экран
    Формат командной строки, перенаправляющий вывод, имеет следующий вид: команда [аргументы] > имя_файла где команда — это любая выполняемая программа
    (например, приложение или утилита), аргументы — это необязательные аргументы команды, а имя_файла — имя обычного файла, в который оболочка перенаправляет вывод

    Перенаправление стандартного ввода:

    Можно перенаправить не только стандартный вывод, но и стандартный ввод. Символ перенаправления ввода (<) заставляет оболочку перенаправить ввод в команду таким образом, чтобы его источником была не клавиатура, а указанный файл. Формат командной строки для перенаправления ввода имеет следующий вид: команда
    [аргументы] < имя_файла

    Каналы:

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

    Канал позволяет избавиться от отдельных команд и этого промежуточного файла. В качестве символа для канала используется вертикальная черта (|).
    Синтаксис командной строки, использующей канал, имеет следующий вид:
    команда_a [аргументы] | команда_b [аргументы]

    Здесь канал используется в одной строке для получения такого же результата, к которому привело бы использование трех командных строк:
    команда_a [аргументы]> temp
    команда_b [аргументы]< temp
    rm temp

    Фильтры:

    Фильтр — это команда, обрабатывающая входной поток данных для создания выходного потока данных. В командной строке, включающей фильтр, используется канал, связывающий стандартный вывод какой- нибудь команды со стандартным вводом фильтра.

    Еще один канал связывает стандартный вывод фильтра со стандартным вводом другой команды. В качестве фильтров могут использоваться далеко не все утилиты.

    Запуск команды в фоновом режиме:

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

    Когда команда запускается в фоновом режиме, вам не нужно ждать завершения ее работы перед тем, как запустить еще одну команду.

    Задание — это серия из одной или нескольких команд, которые могут быть связаны друг с другом каналами. В окне или на экране может быть только одно активное задание, но в фоновом режиме могут выполняться сразу несколько заданий.


    Чтобы запустить задание в фоновом режиме, нужно в конце командной строки, непосредственно перед нажатием клавиши
    ВВОД, поставить знак амперсанда (&). Оболочка присвоит заданию номер в виде небольшого числа и отобразит этот номер в квадратных скобках.

    Использованная литература:

    Robert Love: Linux. System Programming.

    Александр Побегайло. Системное программирование в Windows

    Марк Г. Собель. Linux. Администрирование и системное программирование

    ru.wikipedia.org


    написать администратору сайта