Класс Console
Публичные типы
enum | ChannelMode { Read , ReadWrite } |
enum | TerminalMode { Default , Interactive } |
enum | Type { Tty , Stdio } |
Публичные функции
QByteArray | bytesLeftToRead () |
QByteArray | bytesLeftToWrite () |
ChannelMode | channelMode () const |
Console (Type type, ChannelMode cmode, TerminalMode tmode, QObject *parent=nullptr) | |
void | release () |
TerminalMode | terminalMode () const |
Type | type () const |
Статические публичные функции
static bool | isStdinRedirected () |
static bool | isStdoutRedirected () |
static Console * | stdioInstance () |
static Console * | ttyInstance () |
Дружественные функции и классы
class | ConsolePrivate |
class | ConsoleReference |
Подробное описание
Консольная система QCA.
QCA предоставляет API для асинхронного доступа на основе событий к консоли и stdin/stdout, так как в противном случае эти средства нельзя переносить. Основное предназначение этой системы в QCA — запрос кодовой фразы в приложениях командной строки с использованием консоли tty.
Как это работает: создаётся объект Console для желаемого типа консоли, а затем используется ConsoleReference для работы с консолью. Только одна ConsoleReference может работать с консолью одновременно.
Объект Console
занимает либо физическую консоль (тип
Console::Tty),
либо stdin/stdout (тип
Console::Stdio).
Одновременно можно создавать только по одному экземпляру каждого типа.
Всякий раз, когда пишется код, которому требуется объект tty или stdio, код должен сначала вызвать один из статических методов (ttyInstance() или stdioInstance()), чтобы узнать, существует ли уже консольный объект для желаемого типа. Если объект существует, следует использовать его. Если он не существует, то правило гласит, что соответствующий код должен создать объект, использовать его, а затем уничтожить объект после завершения операции.
Следуя приведенному выше правилу, следует написать код, использующий консоль, без необходимости создавать какой-либо объект главной консоли. Конечно, если приложение создало консоль, то она будет использоваться.
Причина, по которой существует объект главной консоли, заключается в том, что не гарантируется, что
все операции ввода-вывода сохранятся после создания и уничтожения объекта консоли. Если используется
тип Stdio
, то вероятно, будет полезен долгоживущий консольный объект. Можно захватить
необработанный ввод-вывод, вызвав bytesLeftToRead
или bytesLeftToWrite
. Однако не ожидается,
что общий код, требующий консоли, вызовет эти функции при использовании временной консоли. Таким
образом, разработчику приложения потребуется создать свой собственный объект консоли, вызвать код,
использующий консоль, а затем при необходимости выполнить собственное извлечение необработанного
ввода-вывода. Еще одна причина для извлечения необработанного ввода-вывода — это наличие
необходимости переключиться с консоли обратно на стандартные функции (например, fgets()
).
Описание перечислений
Type
enum QCA::Console::Type |
Тип объекта консоли.
Tty | Физическая консоль |
Stdio | stdin/stdout |
ChannelMode
enum QCA::Console::ChannelMode |
Тип ввода-вывода для использования с объектом консоли.
Read | Только для чтения (эквивалент стандартного ввода) |
ReadWrite | Чтение/запись (эквивалентно stdin и stdout) |
TerminalMode
enum QCA::Console::TerminalMode |
Режим работы консоли.
Default | Использовать настройки терминала по умолчанию |
Interactive | Посимвольный ввод, без вывода текста |
Описание конструкторов и деструктора
Console()
QCA::Console::Console (Type type, ChannelMode cmode, TerminalMode tmode, QObject * parent = nullptr) |
Стандартный конструктор.
Следует обратить внимание, что код библиотеки не должен создавать новый объект
Console
, не проверив, существует ли уже объект
Console
требуемого типа. Обоснование этого можно найти
в основной документации класса Console
.
Параметры
type | Тип создаваемого объекта Console |
cmode | ChannelMode (тип ввода-вывода) для использования |
tmode | TerminalMode для использования |
parent | Родительский объект для этого экземпляра |
См. также ttyInstance() и stdioInstance для статических методов, которые позволяют проверить, существует ли уже объект Console с требуемым Type, и, если существует, возвращается ссылка на этот объект.
Описание методов
type()
Type QCA::Console::type () const |
Тип этого объекта Console
.
channelMode()
ChannelMode QCA::Console::channelMode () const |
ChannelMode
этого объекта Console
.
terminalMode()
TerminalMode QCA::Console::terminalMode () const |
TerminalMode
этого объекта Console
.
isStdinRedirected()
static bool QCA::Console::isStdinRedirected () | static |
Проверяет, перенаправляется ли стандартный ввод.
См. также type() и channelMode()
isStdoutRedirected()
static bool QCA::Console::isStdoutRedirected () | static |
Проверяет, перенаправляется ли стандартный вывод.
См. также type() и channelMode()
ttyInstance()
static Console* QCA::Console::ttyInstance () | static |
Текущий консольный объект терминального типа.
Возвращает null
, если нет текущего объекта Console
этого типа,
в противном случае объект Console
для использования.
stdioInstance()
static Console* QCA::Console::stdioInstance () | static |
Текущий консольный объект типа stdio.
Возвращает null
, если нет текущего объекта Console
этого типа,
в противном случае объект Console
для использования.
release()
void QCA::Console::release () |
Выпускает Console
.
Метод позволяет получить доступ к памяти, содержащей любые оставшиеся данные.
bytesLeftToRead()
QByteArray QCA::Console::bytesLeftToRead () |
Возвращает оставшиеся данные из Console
после операции
чтения.
bytesLeftToWrite()
QByteArray QCA::Console::bytesLeftToWrite () |
Возвращает оставшиеся данные из Console
после операции
записи.