simon@vision.UUCP (Simon Taylor) (07/05/89)
I need information on how to use the streams based pseudo-ttys distributed with Interactive 386/ix 2.0. There is a single clone major (/dev/ptmx), and 16 slaves (/dev/pts???). The major can be opened, but I can never open the slaves, even with the master being held open. It would seem only sensible due to the clone nature of the master, that I need to perform some operation to discover which slave to open. The header file defines two ioctl flags, but doesn't elaborate. Interactive refused to answer my questions, well they didn't exactly refuse, they just never rang back. Andy Warner VisionWare Ltd., Systime House, Leeds Business Park, Leeds, LS27 0NH, United Kingdom UUCP : andyw@vision.uucp BANGNET : ...!uunet!mcvax!ukc!vision!andyw ---------------------------------------
larry@hcr.UUCP (Larry Philps) (07/06/89)
In article <670@vision.UUCP> andyw@vision.UUCP (Andy Warner) writes: > I need information on how to use the streams based pseudo-ttys >distributed with Interactive 386/ix 2.0. There is a single clone major >(/dev/ptmx), and 16 slaves (/dev/pts???). The major can be opened, but >I can never open the slaves, even with the master being held open. It >would seem only sensible due to the clone nature of the master, that >I need to perform some operation to discover which slave to open. The >header file defines two ioctl flags, but doesn't elaborate. Interactive >refused to answer my questions, well they didn't exactly refuse, they just >never rang back. I have not tried this with the 386ix 2.0 version of ptys, but have done similar things with other "clone" pty implementations. The code to do such a thing is usually (using your names for the devices): int master, slave; struct stat statbuf; char slavetty[sizeof("/dev/pts00")]; ... /* Get the master side */ if ((master = open("/dev/ptmx", O_RDWR)) < 0) { perror("/dev/ptmx"); exit(1); } /* * Stat the master and look at the minor device number of the * rdev field to find out which pty the clone device assigned * to us. Then form the name of the corresponding slave pty */ if (fstat(master, &statbuf) < 0) { perror("fstat"); exit(2); } (void) sprintf(slavetty, "/dev/pts%02d", minor(statbuf.st_rdev)); if ((slave = open(slavetty, O_RDWR) < 0) { perror(slavetty); exit(2); } Warning: I have not tested this or even copied it, I just typed it in off the top of my head. This is what I would try. Use at your own risk. --- Larry Philps HCR Corporation 130 Bloor St. West, 10th floor Toronto, Ontario. M5S 1N5 (416) 922-1937 {utzoo,utcsri,uunet}!hcr!larry