こんにちは、メッセージキューを介して一連のバイトを送信するプログラムを書いています...
#include <sys/msg.h>
#include <stddef.h>
key_t key;
int msqid;
struct pirate_msgbuf pmb = {2, { "L'Olonais", 'S', 80, 10, 12035 } };
key = ftok("/home/beej/somefile", 'b');
msqid = msgget(key, 0666 | IPC_CREAT);
/* stick him on the queue */
msgsnd(msqid, &pmb, sizeof(struct pirate_msgbuf) - sizeof(long), 0);
上記の例は、私のものに似た beejs Web サイトの単純なプログラムです。
しかし、私がやっていることは、そのような構造体でメッセージを送信することです...
struct msg_queue{
long message_type;
char * buffer;
}
msg_queue を送信する前に、null 文字などを含むあらゆる種類の情報を含む代替バッファーを作成しました。今、私がこのようなことをすると...
struct msg_queue my_queue;
my_queue.message_type = 1;
my_queue.buffer = "My message";
msgsnd(mysqid, &pmb, sizeof(struct msg_queue) - sizeof(long), 0);
ポインターを受け取り、その文字列に格納されている値を読み取ることに問題はありません。しかし、私が似たようなことをするなら...
struct msg_queue my_queue;
my_queue.message_type = 1;
my_queue.buffer = sum_buffer_with_lots_of_weird_values; // of type char *
msgsnd(mysqid, &pmb, sizeof(struct msg_queue) - sizeof(long), 0);
キューを介して他のプロセスに渡すポインターは、格納されている値ではなくガベージを読み取ります。任意の配列を static char * として作成しようとしましたが、それも役に立ちません。キューを介してバッファを適切に渡すにはどうすればよいですか? ありがとう。