X-Spam-Check-By: sourceware.org Message-ID: <25e2d6fe0701190140u17a989fcva9e3cbf1d935ebd4@mail.gmail.com> Date: Fri, 19 Jan 2007 10:40:53 +0100 From: "Florent Morin" To: cygwin AT cygwin DOT com Subject: Re: cygwin 1.5.23-2 : I can't use select() with serial device and socket In-Reply-To: <25e2d6fe0701190139r5e18aa89jc96e2229caaf8649@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <25e2d6fe0701180840k6bd5b27di630bca3a0a010ac3 AT mail DOT gmail DOT com> <45AFA5A5 DOT 3406349E AT dessent DOT net> <25e2d6fe0701180902m35903447w69c1ff91ef4eb8d1 AT mail DOT gmail DOT com> <25e2d6fe0701190139r5e18aa89jc96e2229caaf8649 AT mail DOT gmail DOT com> X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Excuse me, this is my second code : --------------------------------------------- CODE ---------------------------------------------- #include #include #include #include #include #include #include #include #include #include #define BUFFER_SIZE 256 #define DEVICE "/dev/ttyS0" #define TO_WRITE "test communication\n" int main (void) { char buffer_read[BUFFER_SIZE]; int data_read; char buffer_write[BUFFER_SIZE] = TO_WRITE; int data_write; int serial_fd; fd_set read_set; fd_set write_set; int written = 0; serial_fd = open(DEVICE, O_NONBLOCK | O_NOCTTY | O_RDWR); if (serial_fd < 0) { perror("open"); return EXIT_FAILURE; } else printf("Serial port opened.\n"); while (1) { FD_ZERO(&read_set); FD_SET(serial_fd, &read_set); FD_ZERO(&write_set); FD_SET(serial_fd, &write_set); if (select(serial_fd + 1, &read_set, &write_set, NULL, NULL) < 0) { perror("select"); return EXIT_FAILURE; } if (FD_ISSET(serial_fd, &read_set)) { memset(&buffer_read, 0, BUFFER_SIZE); printf("Begin reading...\n"); while ((data_read = read(serial_fd, buffer_read, BUFFER_SIZE - 1)) < 0) { if (errno == EAGAIN) memset(&buffer_read, 0, BUFFER_SIZE); else { perror("read"); return EXIT_FAILURE; } } if (data_read < 0) perror("read"); else printf("Data readed (%d) : %s\n", data_read, buffer_read); } else printf("Serial port not ready to read.\n"); if ((FD_ISSET(serial_fd, &write_set)) && (written == 0)) { printf("Begin writing %s...\n", buffer_write); written = 1; data_write = write(serial_fd, buffer_write, strlen(buffer_write)); if (data_write < 0) perror("write"); else printf("%d caracters written.\n", data_write); } else { if (FD_ISSET(serial_fd, &write_set)) printf("Serial port ready to write but no.\n"); else printf("Serial port not ready to write.\n"); } printf("\n---------------------------------------------\n"); sleep(1); } close(serial_fd); return EXIT_SUCCESS; } --------------------------------------- /CODE --------------------------------------------------------- Thanks, Florent -- 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/