davem@sdcrdcf.UUCP (David Melman) (11/26/86)
I want to be able to check for carrier on a tty port without blocking.
I thought I would use the O_NDELAY flag in an open call, but I found
that the open still hangs, e.g
>open (ttyline, O_WRONLY|O_NDELAY, 0);
Specifically, the tty port is a DEC DMZ.
We are running 4.2bsd with Chris Torek's DMZ driver.
I'm doing this in order to determine whether a LaserJet printer is connect
or not. It is shared between a our Vax and a micro.
How can I do this?
David Melman
UNISYS
UUCP: {hplabs,cbosgd,ihnp4}!sdcrdcf!davem
chris@mimsy.UUCP (11/27/86)
In article <3472@sdcrdcf.UUCP>, davem@sdcrdcf.UUCP (David Melman) writes: >I want to be able to check for carrier on a tty port without blocking. >I thought I would use the O_NDELAY flag in an open call, but I found >that the open still hangs, e.g > >>open (ttyline, O_WRONLY|O_NDELAY, 0); > >Specifically, the tty port is a DEC DMZ. The 4.2 and 4.3 kernels do not check O_NDELAY before waiting for carrier. It is easy to add to a kernel, but (I think) the wrong approach. >We are running 4.2bsd with Chris Torek's DMZ driver. Well, it is not `my' DMZ driver; I just edited it a bit. But if you have my version, you should have a `dmzoopen()' and a `dmzoclose()' in it as well. Configure these in (if you have not done so already) in /sys/vax/conf.c, and then # mknod /dev/dialNN c <maj> <min> where <maj> is the major device number that gets dmzoopen, and <min> is the minor device number of the appropriate tty. Opening the dial line will succeed if and only if there is no one actively using the tty line. If the tty line is in use (by, e.g., getty) the open will fail with EBUSY. The tty line opens will wait for carrier as usual; dial line opens never wait for carrier. (Exception: root can always open the dial line.) -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7690) UUCP: seismo!mimsy!chris ARPA/CSNet: chris@mimsy.umd.edu