Thread View: mod.os.unix
2 messages
2 total messages
Started by usenet
Fri, 13 Mar 1987 15:11
How does close() make dup() work in getty??
Author: usenet
Date: Fri, 13 Mar 1987 15:11
Date: Fri, 13 Mar 1987 15:11
46 lines
1816 bytes
1816 bytes
I recently wrote a new getty for a RT built around curses.
My question is about why one version works and another not.
The following code out lines the differences in the two versions.
Version 1 does not work while Version 2 does.
Version 1.
main(tty)
char *tty; /* tty to use */
{
set_ioctl(); /* put in known mode */
close(0);
close(1);
close(2);
dup(dup(open(tty,2)));
write_utmp(tty); /* do utmp stuff */
get_logid(logid); /* prompt for logid */
execle("/bin/login",logid,NULL);
}
Version 2.
main(tty)
char *tty; /* tty to use */
{
set_ioctl(); /* put in known mode */
close(0);
close(1);
open(tty,2);
close(2);
dup(0);
dup(1);
write_utmp(tty); /* do utmp stuff */
get_logid(logid); /* prompt for logid */
execle("/bin/login",logid,NULL);
}
Does close() cause something to settle that dup() needes from the open()?
The problem with Version one is that /dev/tty does not get attached to
the control group.
Any idea's that might explain this mystery would be greatly appreciated!!
--
Larry Baird Dept. of Computer Science
uucp: {ihnp4!decvax,peora}!ucf-cs!baird University of Central Florida
Orlando, FL 32816
Re: How does close() make dup() work in getty??
Author: usenet
Date: Thu, 26 Mar 1987 23:15
Date: Thu, 26 Mar 1987 23:15
49 lines
2340 bytes
2340 bytes
in /usr/src/sys/sys/tty.c fuction "ttyopen"
there is the following code:
pp = u.u_procp; -- proc table entry
if (pp->p_pgrp == 0) { -- no proc-group ??
u.u_ttyp = tp; -- set /dev/tty pointer
if (tp->t_pgrp == 0) -- no tty-proc-group ??
tp->t_pgrp = pp->p_pid; -- effectivly create new group-leader
pp->p_pgrp = tp->t_pgrp; -- alwasy set proc-group
}
in ttyclose(), which is only called for the *FINAL* close, we have:
tp->t_pgrp = 0;
tp is always a pointer to the tty struct.
t_prgp is the process group used for keyboard signals, and
p_pgrp is the process group shown by ps l
(t_* are fields in the tty struct; p_* are fields in the proc struct.)
As far as I know, u_ttyp can only be cleared by
doing an ioctl (TIOCNOTTY) on /dev/tty
(see the ioctl routine in .../tty_tty.c)
Your process group can be controlled by ioctls too (see tty(4) for
details on those.)
Check your login program carefully, and make *SURE* that t_pgrp is
set *BEFORE* login becomes csh!!! (If not, and you're useing
version #2, then I think that the users csh will be in the p-group
of init (or whoever you have starting getty!!!!! It would not be
nice for a user to send a keyboard-quit-signal to init, would it??
Whenever in doubt, read the source!!!!! (We'll make a hacker out
of you yet!!)
Hope this is of some help
--
John W
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name: John F. Wardale
UUCP: ... {seismo | harvard | ihnp4} !uwvax!astroatc!johnw
arpa: astroatc!johnw@rsch.wisc.edu
snail: 5800 Cottage Gr. Rd. ;;; Madison WI 53716
audio: 608-221-9001 eXt 110
To err is human, to really foul up world news requires the net!
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads