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



         

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


got_sig = 0; write( ctrlpipe, &pk, sizeof pk ); /* послать запрос */

/* ожидать сигнала-"толчка" */ WAITSIG;

/* прочитать ответ из канала данных */ read( datapipe, &pk, sizeof pk );

/* послать сигнал-подтверждение */ kill( pk.pk_pid, SIGUSR1 ); return pk.pk_pid; }

void disconnect(){ struct packet pk;

pk.pk_pid = mypid; pk.pk_code = DISCONNECT; pk.pk_blk = (-1);

got_sig = 0; write( ctrlpipe, &pk, sizeof pk ); /* send request */

/* wait for reply */ WAITSIG;

/* receive reply */ read( datapipe, &pk, sizeof pk );

/* confirm */ kill( pk.pk_pid, SIGUSR1 );

printf( "Disconnected.\n" ); }

request( ptr, blk, spid ) char *ptr; int blk; int spid; { struct packet pk;

pk.pk_pid = mypid; pk.pk_blk = blk; pk.pk_code = RQ_READ;

got_sig = 0; write( ctrlpipe, &pk, sizeof pk ); WAITSIG; read( datapipe, ptr, PBUFSIZE ); kill( spid, SIGUSR1 ); }

bye(){ struct packet pk;

pk.pk_pid = mypid; pk.pk_code = BYE; pk.pk_blk = (-1);

got_sig = 0; write( ctrlpipe, &pk, sizeof pk ); /* send request */ exit(0); }

/* client [номер_блока] */ main(argc, argv) char *argv[]; { int blk; char buffer[ PBUFSIZE ];

setbuf( stdout, NULL ); /* make unbuffered */ blk = (argv[1] ? atoi( argv[1] ) : 0); init(); spid = connect(); printf( "Client pid=%d connected to server pid=%d\n", mypid, spid );

/* запрос блока номер -33 соответствует запросу "завершить * работу сервера" */ if( blk == -33 ) bye();

/* в цикле посылать запросы на чтение блока blk */ while( canRun ){ request( buffer, blk, spid ); printf( "\nBEG-------------------------------------\n" ); fwrite( buffer, PBUFSIZE, 1, stdout ); printf( "\nEND-------------------------------------\n" ); } disconnect(); /* отключиться от сервера */ exit(0); }

/* P_server.c ---------------------------------------------------------*/ /* * Процесс-сервер, принимающий запросы и выполняющий их. */

#include <stdio.h>

#include <signal.h>

#include <fcntl.h>




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