Linux読み書きメッセージキュー
19539 ワード
//リードメッセージキュー
//書き込みキュー
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
struct msgbuf {
long mtype; /* message type, must be > 0 */
char mtext[1024]; /* message data */
};
int main(int argc,char *argv[])
{
int msgid;
int ret = 0;
int type;
int len ;
int flag = 0;
if(argc == 1)
{
fprintf(stderr,"Usage:%s
" ,argv[0]);
exit(EXIT_FAILURE);
}
if(argc == 2)
{
type = atoi(argv[1]);
flag = 0;
}
if(argc == 3)
{
int type = atoi(argv[1]);
flag = flag |IPC_NOWAIT;
}
msgid = msgget(0X1234, 0666);
if(msgid == -1)
{
if(errno == ENOENT)
{
printf("
");
}
if(errno == EEXIST)
{
printf("
");
}
perror("msgget err
");
return -1;
}
printf("msgid:%d
",msgid);
struct msgbuf buf;
memset(&buf,0,sizeof(struct msgbuf));
ret = msgrcv(msgid, &buf,1024, type,flag);
if(ret <0)
{
perror("msgsnd err");
return -1;
}
buf.mtext[ret] = '\0';
printf("mtext:%s
",buf.mtext);
return 0;
}
//書き込みキュー
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
struct msgbuf {
long mtype; /* message type, must be > 0 */
char mtext[1024]; /* message data */
};
int main(int argc,char *argv[])
{
int msgid;
if(argc != 3)
{
fprintf(stderr,"Usage:%s
",argv[0]);
exit(EXIT_FAILURE);
}
int type = atoi(argv[1]);
int len = atoi(argv[2]);
msgid = msgget(0X1234, 0666 |IPC_CREAT |IPC_EXCL);
//key_t key=ftok("./msgfile",'a');
//printf("key =[%x]
",key);
//msgid = msgget(key, 0666 |IPC_CREAT);
if(msgid == -1)
{
if(errno == ENOENT)
{
printf("
");
}
if(errno == EEXIST)
{
printf("
");
}
perror("msgget err
");
return -1;
}
printf("msgid:%d
",msgid);
struct msgbuf buf;
memset(&buf,0,sizeof(struct msgbuf));
buf.mtype =type;
stpcpy(buf.mtext,"11111111");
int ret = msgsnd(msgid, &buf,len, IPC_NOWAIT);
if(ret <0)
{
perror("msgsnd err");
return -1;
}
printf(" ...
");
}