4

私はかなり長い間これにこだわっています。一部の Linux フレーバーで動作するレガシー コード [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