Es ist Carriage Return
. Quelle: Ссылка
Im Folgenden wird die Schleife wiederholt, bis der Benutzer die Zurück -Taste gedrückt hat.
%Vor% '\r'
ist das Wagenrücklaufzeichen. Die Hauptzeit, die es nützlich wäre, sind:
Wenn Sie Text im Binärmodus lesen oder von einem fremden Betriebssystem stammen, werden Sie ihn aufgrund von CR / LF-Zeilenenden aus Textdateien im Windows-Format finden (und wahrscheinlich verwerfen) wollen.
Beim Schreiben in ein interaktives Terminal in stdout
oder stderr
kann '\r'
verwendet werden, um den Cursor zum Anfang der Zeile zurück zu bewegen, um ihn mit neuem Inhalt zu überschreiben. Dies macht einen netten primitiven Fortschrittsanzeiger.
Der Beispielcode in Ihrem Beitrag ist definitiv ein falscher Weg, '\r'
zu verwenden. Es wird davon ausgegangen, dass ein Wagenrücklauf vor dem Zeilenumbruchzeichen am Ende einer eingegebenen Zeile steht, das nicht portierbar ist und nur unter Windows gültig ist. Stattdessen sollte der Code nach '\n'
(newline) suchen und alle Wagenrückläufe verwerfen, die vor dem Zeilenende gefunden wurden. Oder es könnte Textmodus verwenden und die C-Bibliothek die Übersetzung behandeln lassen (aber der Textmodus ist hässlich und sollte wahrscheinlich nicht verwendet werden).
Es gab einmal so viele Terminals wie Schreibmaschinen (nur mit Großbuchstaben, aber das ist eine andere Geschichte). Suchen Sie nach 'Fernschreiber', und wie denken Sie, dass tty
für 'Endgerät' verwendet wurde?
Diese Geräte hatten zwei getrennte Bewegungen. Der Wagenrücklauf bewegte den Druckkopf zurück zum Anfang der Zeile, ohne das Papier zu scrollen; Das Zeilenvorschubzeichen bewegte das Papier eine Zeile nach oben, ohne den Druckkopf zum Anfang der Zeile zurück zu bewegen. Auf diesen Geräten benötigten Sie also zwei Steuerzeichen, um den Druckkopf zum Anfang der nächsten Zeile zurückzubringen: Wagenrücklauf und Zeilenvorschub. Da dies mechanisch war, dauerte es eine Weile, also mussten Sie lange genug pausieren, bevor Sie nach dem Senden der CR- und LF-Zeichen weitere Zeichen an das Terminal senden konnten. Eine Verwendung für CR ohne LF bestand darin, "fett" zu schreiben, indem die Zeichen auf der Zeile überstrichen wurden. Sie würden die Zeile einmal ausschreiben und dann CR verwenden, um neu zu beginnen und zweimal über die Zeichen zu drucken, die fett gedruckt werden müssen. Sie könnten natürlich auch Xs über Dinge schreiben, die Sie teilweise versteckt haben wollen, oder Sie können sehr dichte ASCII-Kunstbilder mit vernünftiger Überstreichung erstellen.
Unter Unix wurde die gesamte Logik für dieses Zeug in einem Terminaltreiber versteckt. Sie könnten den Befehl stty
und die zugrunde liegenden Funktionen (damals ioctl()
Aufrufe; sie wurden 1988 von POSIX.1 in das Interface termios
desinfiziert) verwenden, um alle möglichen Arten zu verändern, wie sich das Terminal verhalten hat.
Irgendwann hast du 'Glas-Terminals', wo die Geschwindigkeiten größer waren und und neue Idiosynkrasien zu bewältigen waren - Hazeltine Störungen und so weiter und so weiter. Diese wurden in den Bibliotheken termcap
und später terminfo
verankert und dann hinter der curses
Bibliothek eingekapselt.
Aber einige andere (Nicht-Unix-) Systeme haben die Dinge auch nicht versteckt, und Sie mussten in Ihren Textdateien mit CRLF umgehen - und nein, das sind nicht nur Windows und DOS, die im CRLF-Camp waren .
Wie auch immer, auf einigen Systemen muss sich die C-Bibliothek mit Textdateien befassen, die CRLF-Zeilenenden enthalten, und diese so darstellen, als ob nur ein Zeilenende am Ende der Zeile wäre. Wenn Sie jedoch die Textdatei als Binärdatei behandeln, sehen Sie sowohl die CR-Zeichen als auch das LF.
Systeme wie das alte Mac OS (Version 9 oder früher) benutzten nur CR (aka \r
) für die Zeilenendung. Systeme wie DOS und Windows (und ich glaube, viele der DEC-Systeme wie VMS und RSTS) verwendeten CRLF für die Zeilenendung. Viele der Internet-Standards (wie Mail) schreiben CRLF-Zeilenendungen vor. Und Unix hat immer nur LF (alias NL oder newline, also \n
) für seine Zeilenenden verwendet. Und die meisten Menschen schaffen es meistens CR zu ignorieren.
Ihr Code sucht ziemlich unkonventionell nach \r
. Auf einem System, das dem C-Standard entspricht, wird das CR erst angezeigt, wenn die Datei im Binärmodus geöffnet wird. Die CRLF oder CR wird von der C-Laufzeitbibliothek auf NL abgebildet.
Es gibt ein paar Zeichen, die auf eine neue Zeile hinweisen können. Die üblichen sind diese zwei: '\ n' oder '0x0A' (10 in Dezimal) - & gt; Dieses Zeichen heißt "Line Feed" (LF). '\ r' oder '0x0D' (13 in Dezimal) - & gt; Dieser wird "Carriage Return" (CR) genannt.
Verschiedene Betriebssysteme behandeln Newlines auf andere Weise. Hier ist eine kurze Liste der häufigsten:
DOS und Windows
Sie erwarten, dass eine neue Zeile die Kombination zweier Zeichen ist, nämlich "\ r \ n" (oder 13 gefolgt von 10).
Unix (und damit auch Linux)
Unix verwendet ein einzelnes '\ n', um eine neue Zeile anzugeben.
Mac
Macs verwenden ein einzelnes '\ r'.
Das ist nicht immer wahr; es funktioniert nur in Windows.
Für die Interaktion mit Terminal in Putty, Linux-Shell, ... wird es verwendet, um den Cursor an den Zeilenanfang zurückzubringen.
folgendes Bild zeigt die Verwendung davon:
Ohne '\ r':
Daten kommen ohne '\ r' zum Kitt-Terminal, es hat nur '\ n'.
Es bedeutet, dass Daten nur in der nächsten Zeile gedruckt werden.
Mit '\ r':
Daten werden mit '\ r' geliefert, d. h. Zeichenfolge endet mit '\ r \ n'. So wird der Cursor im Kitt-Terminal nicht nur zur nächsten Zeile, sondern auch am Anfang der Zeile
gehen
Es hängt davon ab, auf welcher Plattform Sie sich befinden, wie es übersetzt wird und ob es überhaupt dort sein wird: Wikipedia-Eintrag auf Newline
'\ r' bedeutet Wagenrücklauf .
Das bedeutet in der Konsequenz nichts besonderes.Für Zeichenmodus-Terminals (typischerweise emulieren gerade ältere wie oben), verhalten sich im Raw-Modus \ r und \ n ähnlich (außer in Bezug auf den Cursor, Da es keinen Wagen oder eine Walze gibt, wurde in der Vergangenheit ein \ n verwendet, um den Wagen nach unten zu bewegen, während mit \ r der Wagen zurück auf die linke Seite des Bildschirms bewegt wurde.
Tags und Links c