Програма 4.1
Для того, щоб побачити роботу іменованих каналів достатньо використовувати технологію "клієнт-сервер", яка забезпечує надходження інформації від одного процесу до іншого. Програма 4.1 виконує роботу як сервер по обробці даних, які надходять від клієнта (програма 4.2).
#include <stdio.h>
#include <stdlib.h>
#define FIFO_FILE "MYFIFO"
int main(int argc, char *argv[])
{
FILE *fp;
if ( argc != 2 ) {
printf("USAGE: fifoclient [string]\n");
exit(1);
}
if((fp = fopen(FIFO_FILE, "w")) == NULL) {
perror("fopen");
exit(1);
}
fputs(argv[1], fp);
fclose(fp);
return(0);
}
Програма 4.2
Програма 4.2 повинна виконуватись з додатковим аргументом у вигляді рядка, в якому відсутні знаки пропуску. При її помилковому запуску вона відзначає недолік у вигляді попередження:
USAGE: fifoclient [string]
В спрощенному вигляді (при роботі на одному терміналі) реалізувати технологію "клієнт-сервер" можна за допомогою фонового та оперативного режимів, які передбачають:
виконання декількох завдань одночасно;
тимчасове переривання виконання будь-якого завдання та відновлення його через певний час з того ж самого місця, де воно було прервано.
Існують команди аналізу процесів, які дозволяють керувати виконанням завдань. В той же час будь-яке завдання можна перевести до фонового режиму, відмінити та перервати виконання.
Для того, щоб виконати команду у фоновому режимі, необхідно в кінці рядка поставити амперсанд (&). При цьому, система видає на екран монітора номер завдання користувача та системний номер процесу:
$ lpr MyTextFile &
[1] 538
$
Номер завдання, який розміщений у квадратних дужках, - це номер, за яким користувач може звертатися до завдання.
Команда jobs дозволяє одержати список всіх завдань, які виконуються у фоновому режимі. Кожна позиція списку складається з номера завдання (у квадратних дужках) та ознаки виконання. Знак "+" означає виконуваність у даний час, знак "-" ставиться поперед наступного по черзі завдання:
$ lpr MyTextFile &
[1] 574
$ cat *.c > MyTextPrograms &
[2] 575
$ jobs
[1] + Running lpr MyTextFile
[2] - Running cat *.c > MyTextPrograms
$
Якщо завдання у фоновому режимі завершилось, воно нічим не сповіщає про це. Але це становище можна виправити. В наступному прикладі дається вказівка як повідити користувача про закінчення виконання завдання:
notify %2
Переведення завдання з фонового режиму до оперативного (foreground) здійснюється за командою fg:
$fg %2
Призупинка завдання, яке виконується в оперативному режимі, здійснюється за допомогою комбінації клавіш Ctrl-Z. Після цього процес можна перевести до фонового режиму командою bg:
$bg %2
Знищити завдання можна за допомогою команди kill:
$ jobs
[1] + Running lpr MyTextFile
[2] - Running cat *.c > MyTextPrograms
$ kill %2
При операціях над завданнями можна використовувати звернення по PID (системному номеру процесу - абсолютному значенню) чи ідентифікатору процесу (відносному значенню):
$ ps
PID TTY TIME COMMAND
523 tty19 0:05 sh
567 tty19 0:01 lpr
570 tty19 0:00 ps
$ kill 567