4

我已经被困了很长一段时间了。有一个适用于某些 linux 风格的遗留代码 [in C]。我正在尝试将其移植到 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]。我已经检查了上面的一些类似问题 - 尝试在打开之前进行取消链接,但它也对我不起作用。

谁能让我知道上面代码中的问题是什么。

4

0 回答 0