为了教育和编程实践,我想写一个简单的库,可以处理原始键盘输入,并“实时”输出到终端。
我想尽可能地坚持使用ansi C,我只是不知道从哪里开始这样的事情。我已经完成了几次谷歌搜索,99%的搜索结果使用了库,或者是用于C ++。
我真的很想让它在Windows中运行,然后在我有空的时候将它移植到OSX。
答案 0 :(得分:5)
尽可能坚持使用标准C是一个好主意,但是你不会仅使用标准C来完成你所采用的任务。从终端获取字符的机制本身就是特定于平台的。对于POSIX系统(MacOS X),请查看<termios.h>
标题。较旧的系统使用各种标头和系统调用来实现类似的效果。你必须决定是否要进行任何特殊的字符处理,记住“行杀”这样的东西可以出现在行的末尾,并删除到目前为止输入的所有字符。
对于Windows,您需要深入研究WIN32 API - Unix和Windows之间的代码基本上没有共性,至少在将“终端”置于逐个字符模式的情况下。一旦有了读取单个字符的机制,就可以管理公共代码 - 可能。
此外,您还需要担心字符和按下的键之间的差异。例如,要在MacOS X上输入“ï”,请键入 option -u 和 i 。这是三个关键的压力。
答案 1 :(得分:5)
要使用ANSI C将开放流设置为非缓冲,您可以执行以下操作:
#include <stdio.h>
if (setvbuf(fd, NULL, _IONBF, 0) == 0)
printf("Set stream to unbuffered mode\n");
(参考:C89 4.9.5.6)
然而,在那之后你就独自一人了。 : - )
答案 2 :(得分:2)
仅使用标准ISO C无法做到这一点。但是,您可以尝试使用以下内容:
#include <stdio.h>
void setbuf(FILE * restrict stream, char * restrict buf);
及相关功能。
最好的办法是使用ncurses
库。