tcgetattr problem

Dave Korn dave.korn@artimi.com
Thu Sep 28 13:46:00 GMT 2006


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/



More information about the Cygwin mailing list