偽天候センサープログラムを作ってそのデータをメッセージキューで送受するというタスクに取り組んでいます。
送り側のプログラムはコマンドラインでオプションを指定して、道理をわきまえた範囲でランダムな値を発生させて、それを送信します。コマンドライン、ランダムな値の発生までは見よう見まねでなんとか作りましたが、発生させたランダムな数値をどのようにメッセージキューで送信したらよいのかわかりません。具体的に言うと、randtemp関数で発生させた値をどうしたらmsend関数に取り込めるのかわかりません。
少し長くなりますが、作ってみたコードは以下の通りです。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<time.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#define SIZE 30
int randtemp(void);
int randpres(void);
int randhum(void);
int chop(int*);
int msend(int *temp);
int main(int argc, char *argv[])
{
int opt;
while((opt=getopt(argc, argv, "TPH")) !=-1
{
switch(opt)
{
case 'T':
randtemp();
break;
// P,Hは省略
int randtemp(void){
int i;
int aa[256];
srand((unsigned int ) time(NULL));
for(i=0; i<SIZE; i++)
{aa[i]= rand()%(313-233+1)+233);
msend(aa);
i++;
}
return 0;
}
int msend(int *temp)
{
struct msgbuf{
long mtype;
int data[256];
};
struct msgbuf message, *p;
int msqid;
key_t key;
p = &message;
p->mtype = getpid();
key = ftok("mrecv", 'a');
msqid = msgget(key, IPC_CREAT|0666);
msgsnd(msqid, p, sizeof(p->data),0);
if (msgctl(msqid, IPC_RMID, NULL)==-1){
perror("msgctl");
exit(1);
}
return 0;
}