プロセス A にセマフォを設定しました (semget + init to 1)。A をフォークして、B を取得しました。
B をフォークして C を取得しました (プロセス B、C のコードは別の .c ファイルにあるため、extern int semid を使用してグローバル整数として semid を渡しています)。
プロセス C コードに down(semid) を適用しようとすると、「無効な引数」エラーが発生します。
down 関数のコードで行っていることは次のとおりです。
struct sembuf sem_d;
sem_d.sem_num = 0;
sem_d.sem_op = -1;
sem_d.sem_flg = 0;
if ( semop(semid, &sem_d, 1) == -1 )
{
perror("error with down function");
return -1;
}
私は何を間違っていますか?
また、セマフォが初期化されたときの semid が semop の前と同じであることを確認しました。
また、プロセスAでは、BIはwait(-1)を使用しています。