Хрестоматия по программированию на Си в Unix



         

Примеры. Хрестоматия по программированию на Си в Unix - стр. 2


/* new.c_cc[VINTR] = ctrl('C'); */ new.c_cc[VQUIT] = 0; new.c_cc[VERASE] = 0; new.c_cc[VKILL] = 0; }

/* включить прозрачный режим */ openVisual () { if (visual) return; visual = 1; ioctl (0, TCSETAW, &new); }

/* выключить прозрачный режим */ closeVisual () { if (!visual) return; visual = 0; ioctl (0, TCSETAW, &old); }

struct stat st;

main (argc, argv) char **argv; { int r, /* pid процесса-"читателя" */ w; /* pid процесса-"писателя" */

if (argc == 1) { fprintf (stderr, "pty CMD ...\n"); exit (1); }

initVisual ();

if((ptyfd = open ( PTY , O_RDWR)) < 0){ fprintf(stderr, "Cannot open pty\n"); exit(2); }

/* запустить процесс чтения с псевдодисплея */ r = startReader ();

/* запустить процесс чтения с клавиатуры */ w = startWriter ();

sleep (2); /* запустить протоколируемый процесс */ startSlave (argv + 1, r, w);

/* дождаться окончания всех потомков */ while (wait (NULL) > 0); exit (0); }

/* запуск протоколируемого процесса */ startSlave (argv, r, w) char **argv; { FILE * ftty; int pid; int tfd; char *tty = ttyname (1); /* полное имя нашего терминала */

if (!(pid = fork ())) {

/* PTY SLAVE process */ ftty = fopen (tty, "w"); /* Для выдачи сообщений */ setpgrp (); /* образовать новую группу процессов ; * лишиться управляющего терминала */

/* закрыть стандартные ввод, вывод, вывод ошибок */ close (0); close (1); close (2);

/* первый открытый терминал станет управляющим для процесса, * не имеющего управляющего терминала. * Открываем псевдотерминал (slave) в качестве стандартных * ввода, вывода и вывода ошибок */ open ( TTYP, O_RDWR); open ( TTYP, O_RDWR); tfd = open ( TTYP, O_RDWR);

if (tfd < 0) { fprintf (ftty, "\rSlave: can't read/write pty\r\n"); kill(r, SIGKILL); kill(w, SIGKILL); exit (1); }

/* запускаем целевую программу */ if (!(pid = fork ())) {

fprintf (ftty, "\rCreating %s\r\n", SEMAPHORE); fflush (ftty);

/* создаем семафорный файл */ close (creat (SEMAPHORE, 0644));




Содержание  Назад  Вперед