read(2) unter Suse Linux verwandelt 13 (CR) zu 10 (LF)?!

Dieses Thema im Forum "C/C++" wurde erstellt von tillman, 19.04.2006.

  1. #1 tillman, 19.04.2006
    Zuletzt bearbeitet: 22.04.2006
    tillman

    tillman Grünschnabel

    Dabei seit:
    19.04.2006
    Beiträge:
    1
    Zustimmungen:
    0
    Hallo,
    ich spreche mit meinem Programm, das ich unter Suse Linux 9.2 schreibe und betreibe und mit gcc kompiliere, eine RS232 Schnittstelle an, an der ein Tektronix Cable Tester mit SP232 Modul hängt. Es funktioniert alles wunderbar, sowohl Steuerung, als auch das Auslesen der gesammelten Daten. Da der Cable Tester mir pro Datenpunkt einen 13 Bit unsigned integer schickt, wird diese durch das RS232 Prokoll in eine 5 Bit und eine 8 Bit Sequenz zerlegt. Die beiden Zahlen werden von meinem Programm zu einer zusammengefügt. Das Ergebnis passt, bis auf dies:
    Wenn die 5 Bit Zahl = 13 sein soll, wird sie zu 10 verwandelt. (In der 8 Bit Zahl kommt ein so geringer Wert nicht zustande, so dass ich das Problem dort nicht beobachten kann.) Wahrscheinlich wandelt read(2) die Zahl 13 (CR) automatisch in das UNIX Zeilenwechselzeichen 10 (LF) um. Dies ist mein erstes "richtiges" C-Programm, ich bin deswegen etwas ratlos. Kann mir irgend jemand diese Vermutung bestätigen bzw. mir kurz aufzeigen, wie ich dieses Verhalten abstellen kann?
    Vielen Dank!

    #######
    Das Problem wurde gelöst, die Beobachtung war richtig, allerdings passiert der Tausch durch den seriellen Treiber. Lösung:
    mit tcgetattr bzw. tcsetattr das c_iflag ICRNL deaktivieren (siehe termios manpage). In den unten aufgelisteten Einstellungen für den Port habe ich die Änderung nun eingefügt:

    Die Einstellung für den Port:
    void set_port(){
    extern int fd;
    int i,s;
    struct termios options;
    tcgetattr(fd, &options);/*get current options*/
    cfsetispeed(&options,B9600);/*set baud rate for input*/
    cfsetospeed(&options,B9600);/*set baud rate for output*/
    options.c_cflag |= (CLOCAL |CREAD);/*enable receiver, set local mode*/
    options.c_cflag &= ~PARENB;/*no parity, 1 stop bit*/
    options.c_cflag &= ~CSTOPB;
    options.c_cflag &= ~CSIZE;/*mask the character size bits*/
    options.c_cflag |= CS8;/*select 8 data bits*/
    options.c_cflag |= CRTSCTS; /*enable hardware flow control*/
    options.c_lflag &= ~(ICANON | ECHO |ECHOE | ISIG);/*conigured for raw input*/
    options.c_iflag &= ~(IXON | IXOFF | IXANY);/*switch off software flow control (XON is not supported by SP232)*/
    options.c_iflag &= ~ICRNL; /*switch off CR is changed to NL (LF on UNIX)*/
    options.c_oflag &= ~OPOST;/*raw output*/
    tcsetattr(fd, TCSANOW, &options);/*set new options for the port*/
    puts("Port setted up! Opened at 9600Baud!\n");
    //printf("File descriptor: %i\n",fd);
    }
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

read(2) unter Suse Linux verwandelt 13 (CR) zu 10 (LF)?!

Die Seite wird geladen...

read(2) unter Suse Linux verwandelt 13 (CR) zu 10 (LF)?! - Ähnliche Themen

  1. Update auf Apache >=2.4.12 unter Debian Jessie

    Update auf Apache >=2.4.12 unter Debian Jessie: Hi, aufgrund eines Bugs in Apache 2.4 benötige ich zum Deployment von Seafile unter Debian Jessie das Paket apache2 in der Version >= 2.4.12...
  2. Was mache ich falsch? Tiniywm und Mate Install unter OpenBSD

    Was mache ich falsch? Tiniywm und Mate Install unter OpenBSD: Hallo, # make tiny make: don't know how to make tiny Stop in /root/Downloads/tiny/tinywm-1.3 # make tinywm cc -O2 -pipe -o tinywm tinywm.c...
  3. Samba unter Windows 10

    Samba unter Windows 10: Hallo zusammen, ich habe auf meinen Ubuntu Server Samba installiert und eingerichtet. ich kann mich bei Windows 10 mit den Daten anmelden und...
  4. Netzwerkaufbau mit simulierten Paketen unter Linux

    Netzwerkaufbau mit simulierten Paketen unter Linux: Hallo, ich habe folgendes Problem. Da ich noch sehr unerfahren in Sachen Linux bzw. Netzwerkaufbau bin, wollte ich fragen, ob Ihr mir vllt etwas...
  5. Akonadi unterstützt Microsoft EWS

    Akonadi unterstützt Microsoft EWS: Krzysztof Nowicki hat eine initiale Unterstützung von Microsoft Exchange Web Services (EWS) für den KDE-Datenverwaltungsdienst »Akonadi«...