Средства межпроцессорного взаимодействия, страница 8

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, посылка осуществляется за две итерации.