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




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


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

| |




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