#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;否则,返回0。这样就可以打印出关键路径。但是,semget返回一个ENOENT(没有这样的文件或目录)
sem_getid:16850172
sem get val:-1:没有这样的文件或目录
这有什么问题吗?
最佳答案
除非您在第三个参数中指定semget
或IPC_CREAT
,否则IPC_PRIVATE
将获取现有的信号量集。来自man semget
:
ENOENT
No semaphore set exists for key and semflg did not specify IPC_CREAT.
在这种情况下,
ENOENT
表示信号量集不存在,而不是意味着路径不存在。