Подсказка

При создании семафора инициируйте его значением 1 с помощью операции A(S,1). То, что семафор действительно создается, определите, используя флаг IPC_EXCL и значение переменной errno == EEXIST так, как это было сделано для инициализации данных в разделяемой памяти. Перед входом в критический участок выполните операцию D(S,1), а после выхода из него - снова операцию A(S,1).