我已经坚持了很长一段时间了。有一个遗留代码[在C],适用于某些Linux风格。我正在尝试将其移植到iOS上。我在iPhone 6.1模拟器上运行应用程序
我正在尝试使用信号量,打开一个: -
sem_t * ptr_sem = NULL;
ptr_sem = sem_open("robin", O_CREAT , S_IXUSR | S_IRGRP, 0);
if (ptr_sem == SEM_FAILED) {
printf("\nerror number:%d", errno);
return -1;
} else {
printf("\n semaphore creation errno: %d", errno);
return 0;
}
此代码每次运行时返回0。值得注意的是,对于每个新的信号量名称,errno第一次为22 [EINVAL],并且对于所有后续的sem_open尝试[即使在关闭模拟器之后],也将errno设置为13 [EACCES]。此外,返回的指针的返回值是无效的内存地址[0x000..5]。我已经检查了上面的一些类似的问题 - 尝试在打开之前进行取消链接,但它也不适用于我。
任何人都可以告诉我上述代码中的问题。