#include <stdio.h> #include <signal.h> #include <stddef.h> #include <sys/wait.h> #include <sys/ioctl.h> #include <sys/termios.h> int main() { int status; int cpid; int ppid; char buf[256]; sigset_t blocked; /* * This ignores a signal generated by job control shells like tcsh * preventing them from interfering with our shells */ sigemptyset (&blocked); sigaddset (&blocked, SIGTTOU); sigaddset (&blocked, SIGTTIN); sigprocmask(SIG_BLOCK, &blocked, 0); ppid = getpid(); if (!(cpid=fork())) { setpgid(0,0); tcsetpgrp (0, getpid()); execl ("/bin/vi", "vi", NULL); exit (-1); } if (cpid < 0) exit(-1); setpgid(cpid, cpid); tcsetpgrp (0, cpid); waitpid (cpid, NULL, 0); tcsetpgrp (0, ppid); while (1) { memset (buf, 0, 256); fgets (buf, 256, stdin); puts ("ECHO: "); puts (buf); puts ("\n"); } }