On 28 September 2006 03:14, Christopher Faylor wrote: [ ... just to add a few more of the implementation details ... ]
> On Thu, Sep 28, 2006 at 12:10:18AM +0100, ahnkle wrote: >> On 18:36 Wed 27 Sep , Igor Peshansky wrote: >>> >>> #define PORT "com1" >>> ... >>> fd = open(PORT, O_RDWR | O_NOCTTY ); >>> >>> There's your problem. When you open a port as "com1", it looks like a >>> file to Cygwin, since it doesn't recognize it as a valid device name. >>> Thus any attempt to manipulate that fd as a device will fail. >>> >>> Use the Cygwin device (e.g., "/dev/ttyS0"). >> >> Strangely, com1 *does* work in the call to open. Having tried "/dev/ttyS0", >> tcgetattr() works ok. > > "It looks like a file to Cygwin" .. which passes it through to the underlying windows api, which knows that it isn't just a file - but cygwin doesn't. >> I also note that read() and write() work ok too using "com1", but >> tcsetattr() also fails. > > "It looks like a file to Cygwin" .. which passes it through to the underlying windows api, which knows that it isn't just a file - but cygwin doesn't. >> BTW, I obtained the CVS source, but couldn't find the _ioctl() call >> anywhere in my (brief) grepping. Is there any documentation about internal >> structure, and whats going on under the hood? > > The name of the function is "ioctl", not "ioctl". And the specific implementation is in fhandler_serial.cpp. But because you opened something that just looked like a file rather than a special device (because all cygwin can go by is the filename, and since it doesn't begin '/dev/' cygwin "knows" it's not a special device file), cygwin opened a fhandler_disk_file for it. See int fhandler_serial::ioctl (unsigned int cmd, void *buffer) and int fhandler_base::ioctl (unsigned int cmd, void *buf) (since fhandler_disk_file doesn't override the virtual method, it inherits the base class' version). cheers, DaveK -- Can't think of a witty .sigline today.... -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/