メッセージキューを理解しようとしています。私が見た例では、msg
のstrunctは、最初のもの(型)以外の属性が1つだけあり、それはlong
でなければなりません。だから、struct msg{long mtype; char text[100]};
のようなものになります。メッセージキューはどのように動作するはずですか?
新しいint
属性を追加しようとしましたが、x
という文字と数字の両方を受け取ったかどうかを確認しました。
メッセージキューはどのように動作するはずですか? struct
に何個も属性を設定できますか?
そして、また、それは私がのsizeof構造体は、常に、各属性のsizeof
の合計と同じではないことを知っているのでsizeof(send) - sizeof(send.x)
に設定された長さのパラメータを持つmsgrcv
とmsgsnd
関数を呼び出すokですか? ありがとうございます。
int main(){
struct msg{
long mtype;
char text[100];
int x;
};
int key = ftok(".", 10);
int qid = msgget(key, 0666|IPC_CREAT);
int pid = fork();
if(pid == 0){
struct msg send;
send.mtype = 1;
strcpy(send.text, "hello");
send.x = 99;
if(msgsnd(qid, (void*)&send, sizeof(send) - sizeof(send.x), 0)<0){
printf("Error child: ");
}
}
else{
struct msg recieve;
if(msgrcv(qid, (void*)&recieve, sizeof(recieve) - sizeof(recieve.x), 1, 0)<0){
perror("Error parent: ");
};
printf("text: %s\nnumber: %d", recieve.text, recieve.x);
}
return 0;
}
お返事ありがとうございますが、バージョンと私の違いはわかりません。 size_t sz = sizeof(struct msg) - sizeof(long)は、sizeof(recieve) - sizeof(recieve.x)と同じです。何か不足していますか? –
'int'と' long'が同じサイズの場合、数値的には「等価」です。 –
意味的には、 'mtype'のサイズを減算するのは正しいです。送信したいフィールドを減算することは正しくありません( 'x'など)。 –