Re: How to do a blocking read from a serial device?
site_archiver@lists.apple.com Delivered-To: darwin-dev@lists.apple.com On Jul 11, 2006, at 12:04 PM, darwin-dev-request@lists.apple.com 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. = Mike _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (Darwin-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-dev/site_archiver%40lists.appl... 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. This email sent to site_archiver@lists.apple.com
participants (1)
-
Michael Smith