Serieller Port: READ / WRITE



  • Hallo Leute,
    ich würde gerne wissen wie sich der Read-Befehl verhält.
    Wenn ich jetzt in nem einfachn C-Programm auf dem seriellen Device lesen will mach ich ja normal read. Momentan weiß ich aber noch das zu diesem Zeitpunkt auch wirklich Daten ankommen. Wenn ich jetzt nicht weiß ob Daten kommen, wartet dann der Befehl solange bis eine bestimmte anzahl von Bits da sind und liest die dann aus?
    Kann mir das jemand erklären?

    Die Frage ist vielleicht etwas dumm 😕 , ich hoffe aber trotzdem das sie jemand versteht und beantworten kann. Danke



  • Rufst du die Funktion read() mit einer Anzahl von einzulesenden Zeichen von z. B. 80 auf, liest read() so lange, bis entweder 80 Zeichen eingelesen wurden (von ttySx) oder der Datenstrom an der Schnittstelle "abreißt" (es kommen keine weiteren Daten vom Sender). read() liefert dir dann als Rückgabewert die Anzahl der tatsächlich eingelesenen Zeichen.
    Liegen beim Aufruf von read() noch gar keine Daten an, wartet read() tatsächlich, bis das erste Byte ankommt. Um dies zu verhindern, kann man die Funktion select() einsetzten, die einen Timeout erlaubt. Wie das geht findest du in diesem Forum (hier) und ausführlich (mit Beispielprogramm) in meinem Buch "C und Linux".

    Martin



  • Vielen Dank!
    Das war ganau das was ich brauchte!
    🙂
    THX


Anmelden zum Antworten