Mat*_*nti 2 c++ linux semaphore
这听起来像是一个微不足道的问题,但我无法轻易找到解决方案。
这是我的代码:
#include <iostream>
#include <fcntl.h>
#include <semaphore.h>
using namespace std;
int main()
{
sem_t * my_semaphore = sem_open("./my_semaphore", O_CREAT, 0755, 1);
cout<<my_semaphore<<endl;
}
Run Code Online (Sandbox Code Playgroud)
这将打印出 0:未创建信号量。我究竟做错了什么?我在 OSX 环境中测试了这段代码,它运行得很好。
的 Linux 联机帮助页sem_open说(强调添加):
ENOENT该O_CREAT标志未在 oflag 中指定,并且不存在具有此名称的信号量;或者,O_CREAT已指定,但名称格式不正确。
sem_overview关于信号量名称是这样说的:
命名信号量由表单的名称标识
/somename;即,最多NAME_MAX-4(即 251)个字符的以空字符结尾的字符串, 由一个起始斜杠和一个或多个字符组成,其中没有一个是斜杠。