私のコードに問題があります。メッセージキューを作成してメッセージを送信する必要があります。他のプログラムがそのメッセージを受信して応答するまでにしばらくお待ちください。問題は、私がそれを実行すると、msgsndとmsgrcvの両方で無効な引数が得られることです。メッセージキューが無効な引数を与えています
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/msg.h>
typedef struct my_msg{
long type;
char text[100];
char sqdr;
}message;
static void score(int messagge_id, char* A_B){
message send;
send.type=1;
strcpy(send.text, "Try to score");
send.sqdr = *A_B;
if((msgsnd(messagge_id, &send, sizeof(send), 0))<0)perror("Error msgsnd\n");
sleep(3);
if((msgrcv(messagge_id, &send, sizeof(send), 4, 0))==-1)perror("Error msgrcv 1\n");
int test=atoi(send.text);
printf("%d\n", test);
}
int main(){
int caso, key;
char team= 'A';
key=1234;
int msg_id=msgget(key, S_IRUSR|S_IWUSR);
printf("Try function score\n");
score(msg_id, &team);
printf("After score\n");
return 0;
}
'msgget()'呼び出しをエラーチェックしてみませんか?それは成功するか?別のプロセスがメッセージキューを作成しましたか? –
私はmsggetをチェックしようとしますが、私はまだ2番目のプログラムを書いていないので、問題はメッセージキューの作成ではないと思います。使用される鍵の問題かもしれませんか? – Leo
私はあなたがキー 'IPC_PRIVATE'を使用しなかったか、(' S_IRUSR | S_IWUSR'と一緒に)フラグとして 'IPC_CREAT'を指定したので、既存のメッセージに添付しなかったそれを作成していませんでした。 ['msgget()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/msgget.html)( ['msgctl()'](http://pubs.opengroup.org/)を参照してください。完了後にメッセージキューを削除するには、オンラインパブ/ 9699919799/functions/msgctl.htmlを参照してください)。キューはいったん作成されると、削除されるまで存在し続けることに注意してください。 –