Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Jun 2005 18:07:55 -0700 (PDT)
From:      Doug White <dwhite@gumbysoft.com>
To:        snort Snort <snort_sam@yahoo.com>
Cc:        freebsd-current@freebsd.org
Subject:   Re: ttys0 code freezes 5.4 release-p1 badly
Message-ID:  <20050619180546.A83634@carver.gumbysoft.com>
In-Reply-To: <20050615110753.11528.qmail@web54408.mail.yahoo.com>
References:  <20050615110753.11528.qmail@web54408.mail.yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 15 Jun 2005, snort Snort wrote:

> The following ttys0 code freezes 5.4 release-p1 badly:

I can reproduce no freeze of the system. The open of a /dev/tty* device
blocks until carrier is raised on the line, so the process will block
until I connect a null-modem cable to the port and start up a comm program
on another host.

Since you are trying to communicate with a modem, you want to open
/dev/cuaa0 (or /dev/cuaD0 on -CURRENT). cua* doesn't block on carrier.

> #include <stdio.h> /* Standard input/output
> definitions */
> #include <string.h> /* String function definitions */
> #include <unistd.h> /* UNIX standard function
> definitions */
> #include <fcntl.h> /* File control definitions */
> #include <errno.h> /* Error number definitions */
> #include <termios.h> /* POSIX terminal control
> definitions */
>
> /*
> * 'open_port()' - Open serial port 1.
> *
> * Returns the file descriptor on success or -1 on
> error.
> */
>
> int
> open_port(void)
> {
> int fd; /* File descriptor for the port */
>
>
> fd = open("/dev/ttyd0", O_RDWR | O_NOCTTY | O_NDELAY);
> if (fd == -1)
> {
> /*
> could not open the port.
> */
>
> perror("open_port: Unable to open /dev/ttyS0 - ");
> }
> else
> fcntl(fd, F_SETFL, 0);
> return (fd);
> }
>
> int
> write_port(int fd)
> {
> int n = write(fd, "ATZ\r", 4);
> if (n < 0) {
> fputs("write() of 4 bytes failed!\n", stderr);
> return 0;
> }
> return n;
> }
>
> void
> read_port(int fd)
> {
> fcntl(fd, F_SETFL, FNDELAY);
> //fcntl(fd, F_SETFL, 0);
> }
>
> void
> close_port(int fd)
> {
> close(fd);
> }
>
> int main()
> {
> int fd = open_port();
> if (write_port(fd) < 0)
> return 1;
> read_port(fd);
> close_port(fd);
> }
>
> Dose anyone know what is problem and how to fix it?
>
> Thanks
> Sam
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
>

-- 
Doug White                    |  FreeBSD: The Power to Serve
dwhite@gumbysoft.com          |  www.FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050619180546.A83634>