Программа - Клиент

Программа-клиент создает частный (личный) именованный канал, посылает имена этого канала и требуемого файла файловому серверу через общедоступный именованный канал. Затем она распечатывает содержимое файла, полученное через личный именованный канал.

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h >

#include <sys/nio.h>

#include “server.h”

main (int argc, char **argv) /*”named pipe” client.c*/

{

struct message msg;

int n, fdpub, fdpriv;

char line [LINESIZE];

/* синтезировать имя личного программного канала и создать этот канал с правами чтения и записи для всех процессов*/

sprintf(msg.privfifo, “Fifo%d”, getpid());

if (mkfifo(msg.privfifo, S_IFIFO|0666, 0) == -1)

{ perror (msg.privfifo);

exit(1);

}

/* общедоступный именованный канал (создается перед запуском сервера %mkfifo public) открывается на запись, и в него записываются имена личного канала и требуемого файла */

if ((fdpub=open(PUBLIC, O_WRONLY)) == -1)

{ perror (PUBLIC);

exit (2);

}

strcpy (msg.filename, argv[1]);

write (fdpub, (char*)&msg, sizeof(msg));

/* личный именованный канал открывается для чтения */

if ((fdpriv=open (msg.privfifo, O_RDONLY)) == -1)

{ perror (msg.privfifo);

exit (3);

}

/ *распечатать данные, полученные из личного канала */

while((n = read(fdpriv, line, LINESIZE)) > 0)

write(1, line, n);

/ *личный именованный канал закрывается и удаляется из текущего каталога */

close (fdpriv);

unlink (msg.privfifo);

exit(0);

}

Сервер и клиент должны соблюдать соглашение о формате данных, записываемых в общедоступный канал.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: