[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Получение доступа к семафору - Пример
Эта программа показывает использование семафора для доступа к
одиночному разделяемому ресурсу. В этом примере разделяемый ресурс
представляет собой стандартный вывод - экран вашего терминала.
Запускаются две параллельные копии программы в фоновом режиме.
Каждый процесс получает исключительный доступ к терминалу для
вывода неразорванной текстовой строки.
Замечание: текст этой программы используется в нескольких следующих
примерах для демонстрации работы системных вызовов с семафорами.
Фрагмент программы работает следующим образом:
20 Функция ftok(3) создает ключ доступа к набору семафоров.
Было бы полезно проверить успешность создания ключа,
сравнив полученное от ftok(3) значение с -1.
21-24 Выполняется попытка создать семафор. Если она успешна,
переменной creator присваивается 1.
25-31 Иначе, семафор может быть уже создан, и делается попытка
получить к нему доступ. Если это не выходит, программа
печатает сообщение об ошибке и завершается.
... Отсутствующий код описан в следующих примерах.
Файл: semdemo.c
ПОЛУЧЕНИЕ ДОСТУПА К СЕМАФОРУ - ПРИМЕР
1 #include <unistd.h>
2 #include <stdlib.h>
3 #include <sys/types.h>
4 #include <sys/ipc.h>
5 #include <sys/sem.h>
6 #include <stdio.h>
7 #define DUMMY 0
8 #define COUNT 4
9
10 main(int argc, char *argv[])
11 {
12 key_t ipckey;
13 int semid, pid, creator, i;
...
20 ipckey = ftok(argv[0], 's');
21 if ((semid = semget(ipckey, 1,
22 IPC_CREAT|IPC_EXCL|0666)) != -1) {
23 creator = 1;
24 }
25 else {
26 if((semid=semget(ipckey,1,0))==-1){
27 perror(argv[0]);
28 exit(1);
29 }
30 creator = 0;
31 }
...
62 }