как получить доступ к одному и тому же семфору, используя sem_open для другого пользователя - PullRequest
0 голосов
/ 23 января 2019

Я создал глобальный семафор, используя sem_open () с пользователем root:

sem_t * sem = sem_open ("ghMutex", O_CREAT, 0644, 1);

, поэтому, когда я делаю:ls -al / dev / shm /

-rw-r - r-- 1 root root 32 янв. 23 00:23 sem.ghMutex

Теперь у меня другой пользователь в Linux (скажем, User1), который снова вызывает ту же функцию sem_open для создания семафора:

sem_t * sem = sem_open ("ghMutex", O_CREAT, 0644, 1);

В последнем вызове функции,Я получаю ошибку EACCES (разрешение отклонено), так как семафор с таким именем уже создан с пользователем root.

Мои вопросы:

1) как я могу создать семафор с тем же именем длядругой пользователь ??

2) Как лучше всего использовать соглашение об именах для семафора в sem_open (), чтобы к нему могли обращаться несколько пользователей ??

1 Ответ

0 голосов
/ 05 февраля 2019

Вы устанавливаете разрешения только для чтения для другого пользователя.

0644 означает:

  • 6 (чтение и запись) для владельца
  • 4 (только для чтения) для других пользователей группы
  • 4 (только для чтения) для всех остальных

Согласно справочным страницам:

Разрешение на чтение и запись должно бытьпредоставляется каждому классу пользователей, которые получат доступ к семафору.

...