无缓冲I / ANSI C语言Ò(Unbuffered I/O in ANSI C)

2019-09-02 11:56发布

对于教育和编程习惯的缘故,我想编写一个简单的库可以处理原始键盘输入,并输出到“实时”的终端。

我想和ANSI C坚持尽可能多地,我只是不知道从哪里开始是这样的。 我已经做了一些谷歌搜索,结果99%的人使用图书馆,或者是C ++。

我真的很想得到它在窗口工作,然后将其移植到OSX,当我有时间。

Answer 1:

用标准C坚持尽可能是一个好主意,但是你不打算与你采取的任务只使用标准C的机制,从一时间终端一个获得字符得到很远的固有平台专用。 对于POSIX系统(的MacOS X),看<termios.h>报头。 旧的系统使用一个巨大的各种头和系统调用来实现类似的效果。 你必须决定你是否会做任何特殊字符处理,记住的东西,如“行删除”可以在该行的末尾出现和ZAP输入所有字符为止。

对于Windows,你需要深入到WIN32 API - 那里将是基本上是Unix和Windows之间的代码没有共性,至少在你把“端”为字符一个字符模式。 一旦你得到了一个机制来读取单个字符,您可以管理通用代码 - 可能。

此外,你需要担心的字符,按下了按键之间的差异。 例如,输入“I”在MacOS X,你键入选项-U 。 这三个按键。



Answer 2:

要设置一个开放的流是非缓冲的使用ANSI C,你可以这样做:

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

(参考:C89 4.9.5.6)

然而,在那之后你对你自己的。 :-)



Answer 3:

这是不可能只使用标准ISO C.然而,你可以尝试使用以下内容:

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

和相关的功能。

最好的办法,虽然是使用ncurses库。



文章来源: Unbuffered I/O in ANSI C