Re: How to do a blocking read from a serial device?
Re: How to do a blocking read from a serial device?
- Subject: Re: How to do a blocking read from a serial device?
- From: Michael Smith <email@hidden>
- Date: Wed, 12 Jul 2006 00:52:25 -0700
On Jul 11, 2006, at 12:04 PM, email@hidden wrote:
Read(2) will block if there is no data so there's no need to sleep.
Using select(2) is one way to go about it but with only one file
descriptor/socket, it seems pointless to me.
Select(2) makes timeout handling (mandatory for disconnectable
devices such as those attached by USB or serial interfaces) much
simpler.
I note in your example that you don't test for ret == 0, which in the
case
of a blocking read means that if the fd is closed for some reason
(e.g. the
device is destroyed due to removal) you will spin forever.
IMO, select with a non-blocking fd is a much cleaner way to implement
this; it also has the advantage of making additions to the code over
time much simpler, as it's an architectural stepping stone to a state-
machine.
= Mike
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden