Листинг 6.3. Программа client.c (начало)
printf("%s: pid is %i\n\n",obj.name_client,getpid());
signal(SIGUSR1,hndl_end);
signal(SIGUSR2,hndl_send);
if ((ch_read = open("chan1",O_RDONLY))<0) {
printf("%s: error code is 1\nError opening file chan1\n\n",obj.name_client);
exit(1);
};
if ((ch_write = open("chan2",O_WRONLY))<0) {
printf("%s: error code is 1\nError opening file chan2\n\n",obj.name_client);
exit(1);
};
obj.fdw = ch_write;
obj.flag = 0;
client(ch_read,ch_write);
close(ch_read);
close(ch_write);
unlink("chan1");
unlink("chan2");
return 0;
};
void client(int fdr, int fdw){
char FileName[64];
char temp[256];
int num = 10;
int FileID;
read (fdr,FileName,64);
printf("%s: recieved file name %s\n",obj.name_client,FileName);
while(1) {
FileID = open(FileName,O_RDONLY);
if (FileID<0) {
printf("%s: error code is 7\nError opening file %s\n",obj.name_client,FileName);
exit(7);
};
num = read(FileID,temp,sizeof(temp));
close(FileID);
printf("%s: data to send: %s\n",obj.name_client,temp);
write(fdw,temp,strlen(temp));
while(1) {
if(obj.flag == 1 || obj.flag == 2) {
break;
};
};
if(obj.flag == 1) {break;};
if(obj.flag == 2) {
obj.flag = 0;
erase (FileName);
erase (temp);
Листинг 6.3. Программа client.c (продолжение)
int k=0;
while(obj.add_file[k]) {
FileName[k] = obj.add_file[k];
k ++;
};
};
};
return;
};
void hndl_end(int nomer) {
write(obj.fdw,”<>”,5);
obj.flag = 1;
printf(“%s: end\n”,obj.name_client);
};
void hndl_send(int nomer) {
obj.flag = 2;
printf(“%s: new open file is %s\n\n”,obj.name_client,obj.add_file);
};
Листинг 6.3. Программа client.c (окончание)
Помимо FIFO здесь также использованы обработчики пользовательских сигналов SIGUSR1 и SIGUSR2. Посылка данных в буфер fifo также организована циклом. Пользователь может прервать его, послав сигнал USR1 с терминала, после чего сгенерируется посылка “<>” для сервера и обе программы завершат свою работу. Сигнал SIGUSR2 позволяет передать в буфер дополнительные данные из файла (в зависимости от пользовательского ввода). Рассмотрим содержимое файлов input.txt и input2.txt.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.