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


              

уничтожить семафор, что является признаком


fprintf (ftty, "\rStart %s\r\n", argv[0]); fclose(ftty);
/* заменить ответвившийся процесс программой, * указанной в аргументах */ execvp (argv[0], argv); exit (errno); }
/* дожидаться окончания целевой программы */ while (wait (NULL) != pid);
/* уничтожить семафор, что является признаком завершения * для процессов чтения и записи */ unlink (SEMAPHORE);
fprintf (ftty, "\rDied.\r\n"); fflush (ftty);
/* убить процессы чтения и записи */ /* terminate reader & writer */ kill (r, SIGINT); kill (w, SIGINT);
exit (0); } return pid; }
/* Пара master-процессов чтения и записи */
/* запуск процесса чтения с псевдотерминала (из master-части) */ startReader () { char c[512]; int pid; int n;
if (!(pid = fork ())) { /* читать данные с ptyp на экран и в файл трассировки */
signal (SIGINT, bye);
/* ожидать появления семафора */ while (stat (SEMAPHORE, &st) < 0);
fprintf (stderr, "\rReader: Hello\r\n"); ftrace = fopen (TRACE, "w");
/* работать, пока существует семафорный файл */ while (stat (SEMAPHORE, &st) >= 0) {
/* прочесть очередные данные */ n = read (ptyfd, c, 512);
if( n > 0 ) { /* записать их на настоящий терминал */ fwrite( c, sizeof(char), n, stdout ); /* и в файл протокола */ fwrite( c, sizeof(char), n, ftrace );
fflush (stdout); } } bye (); } return pid; }
/* запуск процесса чтения данных с клавиатуры и записи * их на "псевдоклавиатуру". Эти данные протоколировать не надо, * так как их эхо-отобразит сам псевдотерминал */ startWriter () { char c; int pid;
if (!(pid = fork ())) { /* читать клавиатуру моего терминала и выдавать это в ptyp */
openVisual (); /* наш терминал - в прозрачный режим */ signal (SIGINT, onintr);
while (stat (SEMAPHORE, &st) < 0); fprintf (stderr, "\rWriter: Hello\r\n");
/* работать, пока существует семафорный файл */ while (stat (SEMAPHORE, &st) >= 0) { read (0, &c, 1); /* читать букву с клавиатуры */ write (ptyfd, &c, 1); /* записать ее на master-pty */ } onintr (); /* завершиться */ } return pid; }
© Copyright А. Богатырев, 1992-95
Си в UNIX
| |

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