Вопрос

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

Я бы хотел как можно больше придерживаться ANSI C, я просто не представляю, с чего начать. Я провел несколько поисков в Google, и 99% результатов используют библиотеки или предназначены для C ++.

Мне бы очень хотелось, чтобы он работал в Windows, а затем перенести его на OSX, когда у меня будет время.

Это было полезно?

Решение

Хорошая идея - придерживаться максимально возможного стандартного C, но вы не собираетесь слишком далеко продвигаться в своей принятой задаче, используя только стандартный C. Механизмы получения символов из терминала по одному заведомо зависят от платформы. , Для систем POSIX (MacOS X) посмотрите <termios.h> заголовок. В старых системах используется большое количество заголовков и системных вызовов для достижения аналогичных эффектов. Вам нужно будет решить, собираетесь ли вы выполнять какие-либо специальные операции с символами, помня, что такие вещи, как «уничтожение строки», могут появляться в конце строки и убирать все введенные символы.

Для Windows вам нужно углубиться в API-интерфейс WIN32 - в коде между Unix и Windows практически не будет общего, по крайней мере, когда вы переводите «терминал» в посимвольный режим. Если у вас есть механизм для чтения отдельных символов, вы можете управлять общим кодом - возможно.

Кроме того, вам нужно беспокоиться о различиях между символами и нажатыми клавишами. Например, чтобы ввести «& # 239;» в MacOS X вы вводите option-u и i . Это три нажатия клавиш.

Другие советы

Чтобы сделать открытый поток небуферизованным с помощью ANSI C, вы можете сделать это:

#include <stdio.h>
if (setvbuf(fd, NULL, _IONBF, 0) == 0)
  printf("Set stream to unbuffered mode\n");

(ссылка: C89 4.9.5.6)

Впрочем, после этого ты сам по себе. : -)

Это невозможно при использовании только стандартного ISO C. Однако вы можете попробовать использовать следующее:

#include <stdio.h>
void setbuf(FILE * restrict stream, char * restrict buf); 

и связанные функции.

Лучше всего использовать библиотеку ncurses.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top