对于教育和编程习惯的缘故,我想编写一个简单的库可以处理原始键盘输入,并输出到“实时”的终端。
我想和ANSI C坚持尽可能多地,我只是不知道从哪里开始是这样的。 我已经做了一些谷歌搜索,结果99%的人使用图书馆,或者是C ++。
我真的很想得到它在窗口工作,然后将其移植到OSX,当我有时间。
对于教育和编程习惯的缘故,我想编写一个简单的库可以处理原始键盘输入,并输出到“实时”的终端。
我想和ANSI C坚持尽可能多地,我只是不知道从哪里开始是这样的。 我已经做了一些谷歌搜索,结果99%的人使用图书馆,或者是C ++。
我真的很想得到它在窗口工作,然后将其移植到OSX,当我有时间。
用标准C坚持尽可能是一个好主意,但是你不打算与你采取的任务只使用标准C的机制,从一时间终端一个获得字符得到很远的固有平台专用。 对于POSIX系统(的MacOS X),看<termios.h>
报头。 旧的系统使用一个巨大的各种头和系统调用来实现类似的效果。 你必须决定你是否会做任何特殊字符处理,记住的东西,如“行删除”可以在该行的末尾出现和ZAP输入所有字符为止。
对于Windows,你需要深入到WIN32 API - 那里将是基本上是Unix和Windows之间的代码没有共性,至少在你把“端”为字符一个字符模式。 一旦你得到了一个机制来读取单个字符,您可以管理通用代码 - 可能。
此外,你需要担心的字符,按下了按键之间的差异。 例如,输入“I”在MacOS X,你键入选项-U和我 。 这三个按键。
要设置一个开放的流是非缓冲的使用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
库。