#include <sys/sem.h>
#include <sys/stat.h>
#include <cerrno>
#include <iostream>
using namespace std;
main() {
string key = "/m/lb1/activity.log";
int sem_key = ftok (key.c_str(), 1);
if (access (key.c_str(), R_OK) == 0)
printf ("keypath is accessible \n");
printf("sem_getid : %d", sem_key);
errno = 0;
int sem_id = semget (sem_key, 0, 0655);
printf(" sem get val :%d :%s\n", sem_id, strerror(errno));
}
$ ./a.out
keypath is accessible
sem_getid : 16850172 sem get val :-1 :No such file or directory
ls -l /m/lb1/activity.log
-rw-r--r-- 1 apple g6 0 Feb 9 19:08 /m/lb1/activity.log
Вызов «доступа» возвращает 0; поэтому ключевой путь распечатывается. Однако semget не возвращающий ENOENT (Нет такого файла или каталога)C++: semget: Возвращает ENOENT
sem_getid: 16850172 семафор получаю Вэл: -1: Нет такого файла или каталога
Что может быть не так?
В отношении предыдущего ответа Криса Додда неточно, потому что ключ генерируется функцией [ftok] (http://pubs.opengroup.org/onlinepubs/007904975/functions/ftok.html)(), которая принимает путь и целочисленный id и возвращает ключ, подходящий для semget(). –