> -----Original Message----- > From: cygwin-owner On Behalf Of Lutz Hörl > Sent: 19 April 2004 17:29
> Hello, > > I want to use (Windows-) COM port numbers greater > than 16, but when I use open() to get a file > descriptor for the devices I get the behaviour: > > ---1.case----------------------------------------- > > errno = 0; > fd = open("/dev/com8", O_RDWR | O_NONBLOCK); > -> fd = 3, errno = 0 > -> everything is OK, > I can use the opened COM port > > ---2.case----------------------------------------- > > errno = 0; > fd = open("\\.\com8", O_RDWR | O_NONBLOCK); > > -> fd = 3, errno = 20 = ERROR_BAD_UNIT > = "The system cannot find the device specified" > -> I can not use the opened COM port. The port > number 1...16 versus 17...255 does NOT matter. You got this one wrong. The backslashes inside the quotes need to be escaped, otherwise the first two will be parsed as a single escaped backslash, and the second as '\c', which isn't a valid control char in C, so you're likely to end up actually trying to open a device called "\.com8". You must have ignored a warning message from the compiler when you tried this. WHY???!? [EMAIL PROTECTED] /davek/test> cat testslash.c #include <stdio.h> int main (int argc, const char **argv) { printf ("\\.\com8\n"); return 0; } [EMAIL PROTECTED] /davek/test> gcc -o testslash testslash.c testslash.c:6:11: warning: unknown escape sequence '\c' [EMAIL PROTECTED] /davek/test> ./testslash.exe \.com8 [EMAIL PROTECTED] /davek/test> > ---3.case----------------------------------------- > > errno = 0; > fd = open("/dev/com23", O_RDWR | O_NONBLOCK); > > -> fd = -1, errno = 2 = ERROR_FILE_NOT_FOUND > = "The system cannot find the file specified" > -> I can not use the opened COM port. The port > number 1...16 (OK) 17...255 (not OK) DOES matter. > > ---end cases------------------------------------ It's a dos/windoze limitation that only the low few com ports actually have dos devices created for them. 8 is the upper limit, IIRC. So you can just open com1....com8 from an ordinary DOS program, and so cygwin creates 8 com devices under /dev, because that's all it finds windoze has listed. If you want to use the others, you have to use the \\.\comX notation. > Is there a workaround? Yep. Use the \\.\comX notation and get it correct. That should work. 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/