私はかなり長い間これにこだわっています。一部の 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] です。上記の同様の質問をいくつか確認しました-開く前にリンク解除を試みましたが、うまくいきませんでした。
上記のコードの問題を教えてください。