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




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


/* файл LOOP_p.c -------------------------------------------- * Процесс-клиент (cmd1) */ #include <stdio.h>

int trace = 1; /* вести трассировку своих действий */

main(c , v) char **v; { FILE *fp; int pid; char buf[128];

fprintf( stderr, "P: process pid=%d\n", getpid()); fp = fopen( "LOOP_p.c", "r" ); /* открываем файл с текстом этой команды */

/* читаем его построчно */ while( fgets( buf, sizeof buf, fp ) != NULL ){

if( trace ) fprintf( stderr, "P посылает: %s", buf ); /* посылаем его в стандартный вывод: трубу PIP1 */ printf( "%s", buf ); fflush( stdout );

/* ожидать ответа из трубы PIP2 */ fgets( buf, sizeof buf, stdin ); if( trace ) fprintf( stderr, "P получил: %s", buf ); } fclose( stdout ); /* отключиться от трубы PIP1. Если этого не сделать, сервер * не прочитает из нее EOF */

while((pid = wait(NULL)) > 0 ) fprintf( stderr, "P: %d умер\n", pid ); }

/* файл LOOP_q.c ----------------------------------------------- * процесс-сервер (cmd2) */ #include <stdio.h>

int trace = 1;

main(c , v) char **v; { char buf[128]; int pid;

fprintf( stderr, "Q: process pid=%d\n", getpid()); /* читать поступающие из трубы PIP1 строки */ while( fgets( buf, sizeof(buf), stdin ) != NULL ){

/* напечатать полученное сообщение */ if( trace ) fprintf( stderr, "Q прочел: %s", buf );

if( trace ) fprintf( stderr, "Q отвечает: OK=%s", buf ); /* ответить в трубу PIP2 */ printf( "OK=%s", buf ); fflush( stdout ); } fclose( stdout ); /* отключиться от трубы PIP2 */

while((pid = wait(NULL)) > 0 ) fprintf( stderr, "Q: %d умер\n", pid ); }

© Copyright А. Богатырев, 1992-95
Си в UNIX

| |




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