ポインタのみを受け入れる共有メモリにデータを渡す必要があります。したがって、セマフォをこの構造に含める必要がありますが、そうである場合は値を追加できません。どうすれば修正できますか?したがって、これは構造です:
typedef struct querem_usar {
int conta_homem;
int conta_mulher;
int conta_crianca;
struct sembuf lock[4];
struct sembuf unlock[4];
} queremUsar;
そして、これは私がそれを宣言しなければならない方法です:
queremUsar *banheiro;
しかし、次のように、ロックまたはロック解除する値を設定しようとすると:
banheiro->lock[0].sem_num = 0;
banheiro->lock[0].sem_op = -1;
banheiro->lock[0].sem_flg = 0;
banheiro->unlock[0].sem_num = 0;
banheiro->unlock[0].sem_op = 1;
banheiro->unlock[0].sem_flg = 0;
セグメンテーション違反が発生します。私はすでに次のようにmallocを使用しようとしました:
banheiro->lock = (struct sembuf*)malloc(sizeof(struct sembuf));
banheiro->unlock = (struct sembuf*)malloc(sizeof(struct sembuf));
しかし、それは私にエラーを与えました:
error: incompatible types when assigning to type ‘struct sembuf[4]’ from type
‘struct sembuf *’
直してください。コード全体は次のとおりです: https://gist.github.com/4553796 71行目はコメントしないでください。コードをテストするためにこれを行いました。試してみてください。大学向けなのでまったく複雑ではありません。共有メモリ(shm、スレッドを使用できません)とsemop()をセマフォとして使用する男女共用バスルームの問題である必要があります。