Unbuffered I / O in ANSI C

8

Aus Gründen der Ausbildung und Programmierpraxis möchte ich eine einfache Bibliothek schreiben, die rohe Tastatureingaben verarbeiten und in Echtzeit an das Terminal ausgeben kann.

Ich möchte so lange wie möglich bei ansi C bleiben, ich habe einfach keine Ahnung, wo ich so etwas anfangen soll. Ich habe mehrere Google-Suchen durchgeführt, und 99% der Ergebnisse verwenden Bibliotheken oder sind für C ++.

Ich würde wirklich gerne in Windows arbeiten, dann portiere es nach OSX wenn ich Zeit habe.

    
Ryan Rohrer 30.10.2009, 03:50
quelle

3 Antworten

5

Es ist so gut wie möglich, sich an Standard C zu halten, aber Sie werden mit Ihrer angenommenen Aufgabe, die nur Standard C verwendet, nicht weit kommen. Die Mechanismen, um Zeichen vom Terminal einzeln zu erhalten, sind plattformspezifisch . Sehen Sie sich für POSIX-Systeme (MacOS X) den Header <termios.h> an. Ältere Systeme verwenden eine Vielzahl von Kopfzeilen und Systemaufrufen, um ähnliche Effekte zu erzielen. Du wirst dich entscheiden müssen, ob du eine spezielle Charakterbehandlung machst, denk daran, dass Dinge wie 'Kill töten' am Ende der Zeile erscheinen und alle bisher eingegebenen Charaktere zappen können.

Unter Windows müssen Sie sich mit der WIN32-API beschäftigen - im Code zwischen Unix und Windows wird es im Wesentlichen keine Gemeinsamkeit geben, zumindest dort, wo Sie das "Terminal" in den Zeichen-für-Zeichen-Modus setzen. Sobald Sie einen Mechanismus zum Lesen einzelner Zeichen haben, können Sie den gemeinsamen Code verwalten - wahrscheinlich.

Außerdem müssen Sie sich Gedanken über die Unterschiede zwischen den Zeichen und den gedrückten Tasten machen. Um beispielsweise "ï" unter MacOS X einzugeben, geben Sie option-u und i ein. Das sind drei Tastendrücke.

    
Jonathan Leffler 30.10.2009, 04:17
quelle
5

Um einen offenen Datenstrom so einzustellen, dass er mit ANSI C nicht gepuffert wird, können Sie Folgendes tun:

%Vor%

(Referenz: C89 4.9.5.6)

Aber danach bist du allein. : -)

    
Tim 30.10.2009 04:46
quelle
2

Dies ist nicht möglich, wenn nur Standard-ISO-C verwendet wird. Sie können jedoch Folgendes verwenden:

%Vor%

und verwandte Funktionen.

Am besten ist es jedoch, die ncurses -Bibliothek zu verwenden.

    
dirkgently 30.10.2009 04:05
quelle

Tags und Links