#include "header.h"
int main (int argc, char* argv[]){
if(argc < 2) {
printf("%s: error code is 1\nNot enouth input arguments\n\n",argv[0]);
return 1;
};
obj.FName = argv[1];
obj.name_server = argv[0];
obj.chan_write = "chan1";
obj.chan_read = "chan2";
mode_t mode = S_IFIFO | 0666;
int res = mknod (obj.chan_read,mode, 0);
if (res<0) {
printf("%s: error code is 2\nError in creation FIFO, read channel, %s\n\n",obj.name_server,obj.chan_read);
return 2;
};
res = mknod (obj.chan_write,mode, 0);
if (res<0) {
printf("%s: error code is 2\nError in creation FIFO, write channel, %s\n\n",obj.name_server,obj.chan_write); return 2;
};
int fd_read;
int fd_write;
printf("%s: both of channel FIFO has created\n\n",obj.name_server);
fd_write = open(obj.chan_write,O_WRONLY);
if (!fd_write) {
printf("%s: error code is 3\nError open file %s\n\n",obj.name_server,obj.chan_write);
return 3;
};
fd_read = open(obj.chan_read,O_RDONLY);
if (!fd_read) {
printf("%s: error code is 3\nError open file %s\n\n",obj.name_server,obj.chan_read);
return 3;
};
server(fd_read,fd_write);
close(fd_read);
close(fd_write);
return 0;
};
Листинг 6.2. Листинг программы server.c (начало)
void server(int fdr, int fdw) {
char buf[256];
int num;
if (write(fdw,obj.FName,strlen(obj.FName))<0) {
printf("%s: error code is 4\nError writing in FIFO channel\n\n",obj.name_server);
exit(4);
};
while(1) {
num = read(fdr,buf,256);
if( num < 0) {
printf("%s: error code is 5\nError read from FIFO channel\n\n",obj.name_server);
exit(5);
};
if(buf[0] == '<' && buf[1] == '>') {
break;
};
printf("%s has read %i bytes\n",obj.name_server,num);
printf("%s has recieved data: %s\n",obj.name_server,buf);
erase (buf);
};
printf("%s: end\n",obj.name_server);
return;
};
Листинг 6.2. Листинг программы server.c (продолжение)
В качестве входного параметра, процедура принимает имя файла, содержимое которое будет передано клиентом через буфер FIFO. Поскольку сервер в общем случае рассчитан на работу с несколькими клиентами, посылающими наперебой свои запросы, обрабатывающая часть находится в вечном цикле. Выход осуществляется по факту приема оперирующего сигнала “<>”.
#include "header.h"
#include <signal.h>
void hndl_end(int);
void hndl_send(int);
int main (int argc, char *argv[]){
if(argc < 2) {
printf("%s: error code is 1\nNot enougth input arguments\n\n",argv[0]);
return 1;
};
int ch_read;
int ch_write;
obj.name_client = argv[0];
obj.add_file = argv[1];
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.