hehehe :) I'm a great programmer!^^ how do you do? gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghjkl;'
Листинг 6.4. Содержимое файла input.txt
input2
Листинг 6.5. Содержимое файла input2.txt до изменения
input2 rtrtrt
Листинг 6.6. Содержимое файла input2.txt после изменения
Программы запускались с разных терминалов. Рассмотрим терминал сервера.
$ ./server input.txt
./server: both of channel FIFO has created
./server has read 256 bytes
./server has recieved data: hehehe :) I'm a great programmer!^^ how do you do? gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghjkl;
./server has read 9 bytes
./server has recieved data: input.txt
./server has read 6 bytes
./server has recieved data: input2
./server has read 13 bytes
./server has recieved data: input2 rtrtrt
./server: end
И терминал клиента:
$./client input2.txt&
[1] 5029938
$./client: pid is 5029938
./client: recieved file name input.txt
./client: data to send: hehehe :) I'm a great programmer!^^ how do you do? gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghjkl;input.txt
А теперь пошлем сигнал USR2:
$ kill -s SIGUSR2 5029938
./client: new open file is input2.txt
./client: data to send: input2
Изменим файл input2.txt и снова пошлем сигнал SIGUSR2:
$ kill -s SIGUSR2 5029938
./client: new open file is input2.txt
./client: data to send: input2 rtrtrt
Отправляет приложению пользовательский сигнал завершения USR1:
$ kill -s SIGUSR1 5029938
./client: end
Как видно, информация успешно доходила до адресата. Более того, расширение программы, как показано выше, позволяет в цикле передавать серверу неограниченное кол-во информации, в данном случае, через файл input2.txt. Он является своеобразным буфером между пользователем и программой. Посылка сигнала USR1 спровоцировала посылку “<>” в серверное приложение и оба завершили свою работу. Видно, что при переполнении буфера обмена fifo, посылка осуществляется за две итерации.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.