Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shp.doc
Скачиваний:
12
Добавлен:
18.09.2019
Размер:
5.46 Mб
Скачать
  1. Дополнительные средства межпроцессного взаимодействия в unix.

ОС UNIX предлагает множество дополнительных механизмов межпроцессного взаимодействия. Их наличие дает UNIX богатые возможности в области связи между процессами и позволяет разработчику использовать различные подходы при программировании многозадачных систем.

Блокировка записи при помощи вызова fcntl.

Cистемный вызов fcntl позволяет процессу устанавливать для дескриптора файла флаг O_NONBLOCK. Это предотвращает блокировку последующих вызовов. Вызов fcntl предлагает два типа блокировки:

1) блокировка чтения (read locks) - просто предотвращает установку другими процессами блокировки записи при помощи вызова fcntl.

2) блокировка записи (write locks) - предотвращает установку другими процессами блокировку чтения или записи для файла.

Аргумент filedes должен быть допустимым дескриптором открытого файла. Для блокировки чтения дескриптор filedes должен быть открыт при помощи флагов O_RDONLY или O_RDWR. Для блокировки записи дескриптор filedes должен быть открыт при помощи флагов O_WRONLY или O_RDWR.

Команды, которые относятся к блокировке записей:

F_GETLK – получает описание блокировки на основе данных, передаваемых в аргументе ldata.

F_SETFLK – применяет блокировку к файлу и немедленно возвращает управление, если это невозможно.

F_SETLKW – применяет блокировку к файлу и приостанавливает работу, если блокировка уже наложена другим процессом.

Очереди сообщения.

Сообщение – это последовательность символов или байтов. Сообщения передаются между процессами при помощи очередей сообщений, которые можно создавать или получать к ним доступ при помощи вызова msgget. После создания очереди процесс может помещать в нее сообщения при помощи вызова msgsnd, если он имеет соответствующие права доступа.

Этот вызов лучше всего представить как аналог вызова open или creat. Параметр key – простое число, идентифицирующее очередь сообщений в системе. В случае успешного вызова, после создания новой очереди или доступа к уже существующей, вызов msgget вернет ненулевое целое значение, которое называется идентификатором очереди сообщений

Разделяемая память.

Операции с разделяемой памятью позволяют двум и более процессам совместно использовать область физической памяти. Чаще всего разделяемая память является наиболее производительным механизмом межпроцессного взаимодействия. Чтобы сегмент памяти мог использоваться совместно, он должен быть сначала создан при помощи системного вызова shmget. После создания сегмента разделяемой памяти процесс может подключаться к нему при помощи вызова shmat.

14. Напишите аналог команды ls –l

#include <unistd.h>

main()

{ printf("Запуск программы ls\n");

execl("/bin/ls", "ls", "-l", (char*)0);

/* Если execl возвращает значение, то вызов был неудачным */

perror ("Вызов execl не смог запустить программу ls");

exit(1); }

15. Напишите «часы», выдающие текущее время каждые 3 секунды

#include <time.h>

main ()

{ char str[10];

time_t t;

for(;;)

{ time(&t);

strncpy(str,ctime(&t)+11,8);

str[8]=0;

printf(“%s\n”, str);

sleep(3); }}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]