linux下sem_open返回0

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 环境中测试了这段代码,它运行得很好。

Mat*_*Mat 5

的 Linux 联机帮助页sem_open说(强调添加):

ENOENTO_CREAT标志未在 oflag 中指定,并且不存在具有此名称的信号量;或者,O_CREAT已指定,但名称格式不正确

sem_overview关于信号量名称是这样说的:

命名信号量由表单的名称标识 /somename;即,最多NAME_MAX-4(即 251)个字符的以空字符结尾的字符串, 由一个起始斜杠和一个或多个字符组成,其中没有一个是斜杠。