簡體   English   中英

ANSI C中的無緩沖I / O.

[英]Unbuffered I/O in ANSI C

為了教育和編程實踐,我想寫一個簡單的庫,可以處理原始鍵盤輸入,並“實時”輸出到終端。

我想盡可能地堅持使用ansi C,我只是不知道從哪里開始這樣的事情。 我已經完成了幾次谷歌搜索,99%的搜索結果使用了庫,或者用於C ++。

我真的很想讓它在Windows中運行,然后在我有空的時候將它移植到OSX。

盡可能堅持使用標准C是一個好主意,但是你不會僅僅使用標准C來完成你所采用的任務。從終端一次獲取字符的機制本質上是特定於平台的。 對於POSIX系統(MacOS X),請查看<termios.h>標頭。 較舊的系統使用各種標頭和系統調用來實現類似的效果。 你必須決定是否要進行任何特殊的字符處理,記住像行刪除這樣的東西可以出現在行的末尾並刪除到目前為止輸入的所有字符。

對於Windows,您需要深入研究WIN32 API - 在Unix和Windows之間的代碼中基本上沒有共性,至少在將“終端”置於逐個字符模式的情況下。 一旦有了讀取單個字符的機制,就可以管理公共代碼。

此外,您需要擔心字符和按下的鍵之間的差異。 例如,要在MacOS X上輸入“ï”,請鍵入選項-ui 這是三個關鍵的印刷機。

要使用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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM