Aihuxl.129 net.unix-wizards utzoo!decvax!harpo!npois!houxi!ihnss!ihuxl!ignatz Fri May 7 12:09:18 1982 Re: Interterminal Comumunications You have an interesting problem. You see, it's very simple to log only your half of a terminal session. That is, you can do: tee /dev/ttyXX >logfile where ttyXX is the tty of the person you want to talk to. Now, any line you enter will be logged in logfile, as well as going to the other person. However, since they presumably will be writing to your device, as well, the characters they write go directly onto the output queue for your device--i.e., your processnever sees them, and there's no way for you to trap them. However, a mechanism is suggested by this: suppose you create a named pipe; issue the tee, and wait. Meanwhile, the other person issues a background process which sucks data out of the pipe, and then issues a tee to the SAME named pipe. (Why not just both append to the same logfile, eg. "tee /dev/ttyXX >>logfile"? UNIX buffering scotches the synchronization. The pipe write, however, is atomic.) Of course, you have some whistles... A fully working and (I believe) fully debugged shellscript implementation follows...of course, if it were written in 'C', it would be more efficient. But is it worth it? ----------------------------------------------------------------------- # # logwrite user [ logpath ] # # Dave Ihnat (AiC) 6 May 1982 # # This shellscript is available to any and all. Support, while likely # if politely requested, is neither implied nor guaranteed; and author # assumes no liability resulting from use of this program by others. # # Logwrite is used in exactly the same manner as write(1). It will # create a full log of the transactions in either the file `logpath`, # or in the current initiator's directory. Note that only the initiator # receives a copy of the transaction. # LOGPATH=logfile LOGFILE=logfile if [ $# -le 0 ] then echo "Usage: logwrite user [logpath]" exit 1; fi USER=$1 shift; if [ $# -gt 0 ] then LOGPATH=$1 LOGFILE=`basename $LOGPATH` fi; if [ "$LOGNAME" = "$USER" ] then echo "You can't talk to yourself, unless you're schizophrenic..." exit 1; fi USERTTY=`who | fgrep $USER | tr -s " " " " | cut -f2 -d" "` if [ ! "$USERTTY" ] then echo "User $USER is not logged on."; exit 1; fi; MYTTY=`echo $LOGTTY | cut -f3 -d/` if [ ! -w /dev/$USERTTY ] then echo "You cannot talk to this user; permissions not set."; exit 2; else echo "Logwrite from $LOGNAME..." >/dev/$USERTTY; fi if [ ! -p /usr/tmp/LOG$USERTTY -a ! -p /usr/tmp/LOG$MYTTY ] then # Initiator...make pipe, and hang on it. trap "rm -f /usr/tmp/LOG$USERTTY 2>/dev/null;\ rm -f /usr/tmp/Log$MYTTY 2>/dev/null;\ exit" 2 3; /etc/mknod /usr/tmp/LOG$USERTTY p chmod a+rw /usr/tmp/LOG$USERTTY tee /dev/$USERTTY >/usr/tmp/LOG$USERTTY echo "EOF" >/dev/$USERTTY; while [ -s /usr/tmp/LCK$USERTTY ] do : done; cp /usr/tmp/Log$USERTTY $LOGPATH 2>/dev/null; if [ $? ] then echo "Unable to copy to $LOGPATH...trying $HOME/$LOGFILE..." cp /usr/tmp/Log$USERTTY $HOME/$LOGFILE 2>/dev/null; if [ $? ] then echo "Unable to copy to $HOME/$LOGFILE...trying $HOME/logfile..." cp /usr/tmp/Log$USERTTY $HOME/logfile 2>/dev/null; if [ $? ] then echo "Unable to copy to logfile" echo "Log of transaction may be found in /usr/tmp/Log$USERTTY." exit 1; else echo "File in $HOME/logfile." fi; else echo "File in $HOME/$LOGFILE." fi; fi; rm -f /usr/tmp/Log$USERTTY; rm -f /usr/tmp/LOG$USERTTY exit; else # Recipient... (exec 0/usr/tmp/LCK$MYTTY; while read line; do echo "$line" >>/usr/tmp/Log$MYTTY; done; chmod a+rw /usr/tmp/Log$MYTTY; rm -f /usr/tmp/LCK$MYTTY )& tee /dev/$USERTTY >/usr/tmp/LOG$MYTTY echo "EOF" >/dev/$USERTTY; fi; # ***** End of Shellscript Ver. 1.0 ***** --------------------------------------------------------------------- This is surprising...as a money-grubbing capitalistic consultant, I don't often give away freebies like this. Maybe I need a drink... Dave Ihnat Analysts International Corporation Bell Telephone Laboratories Indian Hill, IL ihuxl!ignatz (312) 979-6747 ----------------------------------------------------------------- gopher://quux.org/ conversion by John Goerzen of http://communication.ucsd.edu/A-News/ This Usenet Oldnews Archive article may be copied and distributed freely, provided: 1. There is no money collected for the text(s) of the articles. 2. The following notice remains appended to each copy: The Usenet Oldnews Archive: Compilation Copyright (C) 1981, 1996 Bruce Jones, Henry Spencer, David Wiseman.