Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sourceware DOT cygnus DOT com Delivered-To: mailing list cygwin AT sourceware DOT cygnus DOT com Message-ID: <37C22F0C.A256DD1F@topic.com.au> Date: Tue, 24 Aug 1999 15:35:08 +1000 From: Geoff Appleby X-Mailer: Mozilla 4.6 [en] (WinNT; I) X-Accept-Language: en MIME-Version: 1.0 To: Kim Poulsen CC: cygwin AT sourceware DOT cygnus DOT com Subject: Re: Serial port programming References: <37C0EAC4 DOT 63151D86 AT tbit DOT dk> <37C113FB DOT 9676DF40 AT vinschen DOT de> <37C11931 DOT 422C65E6 AT tbit DOT dk> <19990823110515 DOT C13837 AT cygnus DOT com> <37C22DB3 DOT BF500713 AT tbit DOT dk> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Why not combine the two? Use open() to startup, and set the control, then fdopen() once the configuration is established and you are happy to just read and write? Just a thought :) --Geoff Kim Poulsen wrote: > > Chris, > > The problem with fopen() is that it returns a FILE* where open() return > an int. fopen() is way to advanced for use with serial port I/O as > the concept of a FILE is meaningless on a serial channel i.e. there is > no name or path etc. associated with a raw serial stream. In > addition read() and write() uses an int file descriptor and not a FILE*. > The open(), read(), and write() functions are the most low level > I/O handling ANSI C can handle. The f*() functions are all built on > these functions. If I use fopen() I have no way of controlling the > channel characteristics such as baud rate, bits, parity etc. This > I can do with the int returned from the open() function. > If however you should have some running code (the code below _will_ > run) using fopen() I'd sure like to see it for the educational value. > > Thanks for your response. > /Kim > > PS: Why are you posting everything twice ? > > Chris Faylor wrote: > > > > On Mon, Aug 23, 1999 at 11:49:37AM +0200, Kim Poulsen wrote: > > >Corinna Vinschen wrote: > > >> Kim Poulsen wrote: > > >> > I've got the following problem: > > >> > I need to access the serial ports of my PC through an ANSI C program. > > >> > How do I do that ? I have already tried using fopen("/dev/com2", "r") > > >> > and fopen("com2", "r") but these only causes a core dump. > > >> > [...] > > >> AFAIK this is a known problem in b20.1. Try to use a newer snapshot. > > > > > >I have the problem solved. A a contribution to the mailing list I > > >submit the solution to the problem below. > > > > I'm not sure how this solves your problem. You aren't using fopen. That > > appears to be it. > > > > As is so often the case, with these kinds of problems, simply running the > > program using gdb would have probably provided worlds of information for > > debugging the problem. > > > > If the code sample below is getting you running, then fine. It is not > > a generic solution for people who want to use stdio for serial I/O, > > however. AFAIK, that does work. > > > > -chris > > > > >#include > > >#include > > >#include > > >#include > > > > > >#define BAUDRATE B9600 > > >#define MODEMDEVICE "com2" > > > > > >main() > > >{ > > > int fd,c, n; > > > char str[2]; > > > struct termios options; > > > > > > fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); > > > if (fd <0) {perror(MODEMDEVICE); exit(-1); } > > > > > > options.c_cflag = BAUDRATE; > > > options.c_cflag &= ~CSIZE; /* Mask the character size bits */ > > > options.c_cflag |= CS8; /* Select 8 data bits */ > > > > > > /* Write something */ > > > n = write(fd, "UART is functional\n\r", 19); > > > if (n < 0) > > > puts("write() of 19 bytes failed!"); > > > > > > /* Make read() return immediately */ > > > fcntl(fd, F_SETFL, FNDELAY); > > > > > > /* Read something until 'Q' recieved */ > > > while(str[0] != 'Q') { > > > if(read(fd, str, 1) != -1) { > > > printf("%s\n", str); > > > } > > > } > > >} > > > > -- > > Want to unsubscribe from this list? > > Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com > > -- > Kim Poulsen, B.Sc.E.E, System Developer HW > Ericsson Telebit A/S Tel: + 45 86 28 81 76 > Fabriksvej 11 Fax: + 45 86 28 81 86 > DK-8260 Viby J E-mail: info AT tbit DOT dk > Denmark URL: http://www.tbit.dk/ > > -- > Want to unsubscribe from this list? > Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com -- (__) (oo) /-------\/ Geoff Appleby / | || geoff AT topic DOT com DOT au Internet Engineer * ||----|| Ph: +61 2 6257 7111 tSA Consulting Group ^^ ^^ Fax: +61 2 6257 7311 -- Want to unsubscribe from this list? Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com