🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #72849

Re: Jak skutecznie odczytać wolne miejsce w buforze nadawczym portu szeregowego?

#72849
From: spryciarzsprytny7
Date: Wed, 11 Jul 2018 18:05
12 lines
3232 bytes
Dzięki za odpowiedź. Skomentuję twoją odpowiedź, bo mam wątpliwości.

> 3. Jak select() zwróci writability to wyślij całą kolejkę do write() 
>    (ale nie więcej, niż SSIZE_MAX bajtów)

Bufor portu szeregowego w Linux-e to 4KB. Przynajmniej bufor wejściowy tyle ma... Natomiast SSIZE_MAX to 9223372036854775807 (w Kubuntu 18.10 jaki mam pod ręką - podejrzewam, że na Raspbianie jest podobnie bo to też 64 bitowy system - mogę to jutro sprawdzić). Tak więc ZCW te twoje zastrzeżenie w nawiasie jest bez sensu, bo SSIZE_MAX jest dużo większa od całej pamięci operacyjnej...

Poza tym nawet gdyby założyć, że SSIZE_MAX ma wielkość bufora to i tak nie o to mi chodzi, bo ja chcę wykorzystać bufor Linux-a do ciągłej transmisji (w tym celu też robię obsługę zapisu i odczytu w 2 wątkach). Bardzo mi zależy na tym, by zrobić obsługę portu szeregowego porządnie i by byłą uniwersalna i wydajna. Tak by był sens użycia jej do innych projektów...

Póki tego nie wyjaśnisz, to nie będę niczego zmieniał, bo jak pisałem, zapis po jednym bajcie z uprzednim sprawdzeniem pselect działa bez zarzutu...

W sumie to nie wiem co widzisz w tym złego (w zapisie bajt po bajcie), skro jest powiedziane (przez inne guru - link w mojej poprzedniej wypowiedzi), że w Linux-ie port szeregowy to urządzenie znakowe, a nie blokowe - przez to nie ma buforów i zapis i odczyt odbywa się po jednym znaku (tak działa też klawiatura i mysz). W sumie trochę tego nie jarzę, bo można sprawdzić ile danych jest do odczytu, a nie wiadomo ile można wysłać...
Technical Details
Message-ID: <b861f107-de90-4db7-8b82-2473d6bfb4e2@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!feeds.phibee-telecom.net!newsfeed.xs4all.nl!newsfeed7.news.xs4all.nl!85.12.16.70.MISMATCH!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!f6-v6no3357078qth.0!news-out.google.com!u13-v6ni1455qtg.0!nntp.google.com!f6-v6no3357065qth.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <62ce83e9-ba03-4a59-8f59-6e4acc6ad001@googlegroups.com> <pi4u7m$j0j$1$gof@news.chmurka.net>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a37:614e:: with SMTP id v75-v6mr18151072qkb.39.1531332359235;        Wed, 11 Jul 2018 11:05:59 -0700 (PDT)
X-Received: by 2002:a0c:e889:: with SMTP id b9-v6mr36474qvo.3.1531332358841; Wed, 11 Jul 2018 11:05:58 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!feeds.phibee-telecom.net!newsfeed.xs4all.nl!newsfeed7.news.xs4all.nl!85.12.16.70.MISMATCH!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!f6-v6no3357078qth.0!news-out.google.com!u13-v6ni1455qtg.0!nntp.google.com!f6-v6no3357065qth.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.os.linux.programowanie
Date: Wed, 11 Jul 2018 11:05:58 -0700 (PDT)
In-Reply-To: <pi4u7m$j0j$1$gof@news.chmurka.net>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=188.146.68.11; posting-account=gLUTRAoAAADr4_ywPlZaMoP-wsVeFJh_
NNTP-Posting-Host: 188.146.68.11
References: <62ce83e9-ba03-4a59-8f59-6e4acc6ad001@googlegroups.com> <pi4u7m$j0j$1$gof@news.chmurka.net>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <b861f107-de90-4db7-8b82-2473d6bfb4e2@googlegroups.com>
Subject: Re: Jak skutecznie odczytać wolne miejsce w buforze
 nadawczym portu szeregowego?
From: spryciarzsprytny7@gmail.com
Injection-Date: Wed, 11 Jul 2018 18:05:59 +0000
X-Received-Bytes: 3371
X-Received-Body-CRC: 1149031635
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit