私は、メインプロセスが「データを作成している」小さなC++プログラムを持っていて、そのデータを読み込む子プロセス(fork)に送ります。私の問題は、学校でコードがうまくいくことですが、自分のラップトップでは、両方のプロセスがプログラムの開始直後に停止してしまいます。具体的には、両方ともWaiting Channel "do_msgrcv"にあります。それは学校で助けている場合、我々はUbuntuの12.04持ちC++ msgsndとmsgrvcがスリープ状態になった
#define VYROBA 1 // Manufacturer
#define PREPRAVA 2 // Transport
void manufacturer () {
static int count = 0;
int rcv [ 2 ];
while (1) {
int snd [ 2 ] = { VYROBA, count };
int ret = msgsnd (glb_msg_id, &snd, sizeof (int), 0);
ret = msgrcv (glb_msg_id, &rcv, sizeof (int), PREPRAVA, 0);
printf ("Got crate\n");
}
}
void consumer () {
static int count = 0;
int rcv [ 2 ];
while (1) {
int ret = msgrcv (glb_msg_id, &rcv, sizeof (int), VYROBA, 0);
usleep (500000);
if (ret < 0) {
printf ("Can't read message.\n");
}
printf ("Got product: %d\r\n", rcv [ 1 ]);
fflush (stdout);
rcv [ 1 ]++;
if (rcv [ 1 ] == 10) {
int snd [ 2 ] = { PREPRAVA, rcv [ 1 ] };
ret = msgsnd (glb_msg_id, &snd, sizeof (int), 0);
} else {
ret = msgsnd (glb_msg_id, &rcv, sizeof (int), 0);
}
}
}
と私はUbuntuの16.04を使用しています:
は、ここに私のコードです。
ありがとうございました。
送受信の関連コードをこの投稿に直接投稿してください。 patstebinリンクを使用することは悪い習慣と考えられます。なぜなら、誰かがこの質問を6か月で読んでいれば、重要な要素はもう利用できなくなるからです。 – Christophe
@Christopheご迷惑をおかけして申し訳ありませんが、今修正されました。 – cmoud94
あなたのUbuntuの1つが32ビットで、もう1つが64ビットである可能性はありますか? – Christophe