Here is some code which is The Wrong Answer (the right answer being, use Denk's SELF & ELDK and you will have no worries or problems in life).
Nonetheless, this Wrong Answer is illuminating in that it shows the essentials of what needs to happen. // John Kerl // Avnet Design Services // 2002/03/27 // ttyrun.c: // Runs a program with the terminal set up correctly for job control. // * Compile with powerpc-linux-gcc ttyrun.c -o ttyrun // * Run in /etc/rc.whatever as ttyrun {program name} {arguments ...}, // e.g. /bin/ttyrun /bin/sh. #include <stdio.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <signal.h> #include <termios.h> #include <unistd.h> #include <sys/ioctl.h> // ---------------------------------------------------------------- void run_prog(int nargc, char ** nargv, char ** oenvp) { char * envs[] = { "HOME=/", "TERM=linux", "PATH=/bin", "LD_LIBRARY_PATH=/lib", "PS1=temp# ", 0 }; char * nenvp[8]; nenvp[0] = envs[0]; nenvp[1] = envs[1]; nenvp[2] = envs[2]; nenvp[3] = envs[3]; nenvp[4] = envs[4]; nenvp[5] = envs[5]; if (execve(nargv[0], nargv, oenvp) < 0) perror("execve"); } // ---------------------------------------------------------------- int main(int argc, char ** argv, char ** envp) { char tty_name[] = "/dev/ttyS0"; int tty_fd; int pid; int pgrp; int ppgrp; int ttypgrp = -2; if (argc < 2) { fprintf(stderr, "Usage: %s {program name}\n", argv[0]); exit(1); } tty_fd = open(tty_name, O_RDWR); if (tty_fd < 0) { perror("open tty"); exit(1); } // Only go through this trouble if the new // tty doesn't fall in this process group. pid = getpid(); pgrp = getpgid(0); ppgrp = getpgid(getppid()); if (ioctl(tty_fd, TIOCGPGRP, &ttypgrp) < 0) { perror("ioctl TIOCGPGRP"); } if (pgrp != ttypgrp && ppgrp != ttypgrp) { if (pid != getsid(0)) { if (pid == getpgid(0)) setpgid(0, getpgid(getppid())); setsid(); } signal(SIGHUP, SIG_IGN); ioctl(0, TIOCNOTTY, (char *)1); signal(SIGHUP, SIG_DFL); close(0); close(1); close(2); close(tty_fd); tty_fd = open(tty_name, O_RDWR); ioctl(0, TIOCSCTTY, (char *)1); dup(tty_fd); dup(tty_fd); } else { close(tty_fd); } run_prog(argc - 1, &argv[1], envp); return 0; } -----Original Message----- From: Chris Wedgwood [mailto:[EMAIL PROTECTED] Sent: Monday, January 13, 2003 12:49 PM To: Mark Chambers Cc: linuxppc-embedded at lists.linuxppc.org Subject: Re: Control-C in bash ??? On Mon, Jan 13, 2003 at 02:09:00PM -0500, Mark Chambers wrote: > On a PC, I can, for instance, enter "ping 192.168.1.4", then hit > Control-C and stop the ping. For the life of me, I can't figure out > how to do the same on my MPC860 system!!! if you boot init=/bin/sh or whatever and your init/login doesn't set the tty up, you will need to do it yourself (man stty). --cw ** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/