Forum: Compiler & IDEs Linux, write \n ergibt \r\n


von Gibts N. (schneeblau)


Lesenswert?

Hallo, ich habe wieder ein Verständnisproblem in C.

Ich habe ein Array der Länge X.

Der Inhalt wird per write() an den UART ausgegeben.

Das letzte Zeichen dieses Arrays ist ein "\n", was laut 
http://de.wikipedia.org/wiki/Zeilenumbruch unter Linux einem 0x0A 
entsprechen sollte.

Allerdings statt der X Zeichen X+1 gesendet, welches zuerst ein 0x0D und 
dann ein 0x0A enthält. Woher kommt das 0x0D? In den manpages finde ich 
nichts, und eine Ersetzung sollte unter Linux ja auch nicht stattfinden?

Wer kann erklären, warum anscheinend doch eine Ersetzung stattfindet? Wo 
finde ich etwas handfestes?

von Georg A. (georga)


Lesenswert?

> In den manpages finde ich nichts, und eine Ersetzung sollte unter
> Linux ja auch nicht stattfinden?

Potentiell doch, siehe termios (C) bzw. stty (Shell). Versuch mal stty 
-F /dev/ttyS0 -onlcr

von (prx) A. K. (prx)


Lesenswert?

Gibts Ne schrieb:
> und eine Ersetzung sollte unter Linux ja auch nicht stattfinden?

Da das System davon ausgehen muss, dass ein angeschlossenes Terminal bei 
LF kein CR-LF ausführt, sondern wirklich nur LF, wird normalerweise eine 
Ersetzung stattfinden.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Georg A. schrieb:
> Potentiell doch, siehe termios (C) bzw. stty (Shell). Versuch mal stty
> -F /dev/ttyS0 -onlcr

Er sollte das besser in seinem C Programm als Initialisierung machen 
statt in der Shell.

Hier könnte man sich einfach die Funktion ttyraw() klauen, um sämtliche 
Unix-typische Zeichenverabeitung auf einem TTY abzuschalten:

  http://www.cs.uleth.ca/~holzmann/C/system/ttyraw.c

Wie Du schon sagtest: Das Manual zu termios(3) hilft, um ttyraw() zu 
verstehen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.