- 论坛徽章:
- 0
|
#include <sys/types.h>
#include <sys/ipc.h>
#include <stdio.h>
#include <string.h>
struct msgbuf
{
long msgtype ;
char msgtext[1024] ;
} sndmsg ,rcvmsg;
int main()
{
key_t key ;
pid_t pid ;
int msgid ;
int status ;
char str1[] = {"test message:hello!"};
if((pid = fork()) < 0)
{
perror("(29) fork error") ;
exit(1) ;
}
else if( pid == 0)
{
/* if((key=ftok("ipc.c",'a'))==-1)
{
printf("(42)ftok error\n") ;
exit(1);
} */
if(msgid = msgget(IPC_PRIVATE, IPC_CREAT|0666))
{
perror("child msgget error") ;
exit(1) ;
}
sndmsg.msgtype = 111 ;
strcpy(sndmsg.msgtext, str1) ;
if(msgsnd(msgid, (struct msgbuf*)&sndmsg, sizeof(str1) + 1, 0) == -1)
{
perror("msgsnd error!\n") ;
exit(254) ;
}
}
else
{
sleep(3) ;
/* if((key=ftok("ipc.c",'a'))==-1)
{
perror(" parent ftok error") ;
exit(1);
} */
if(msgid = msgget(0, IPC_CREAT|0666))
{
perror("parent msgget error") ;
exit(254) ;
}
if(status = msgrcv(msgid, (struct msgbuf*)&rcvmsg, 80, 111, IPC_NOWAIT) == -1)
{
printf("msgrcv error !\n") ;
exit(254) ;
}
printf("The received message:%s.\n", rcvmsg.msgtext) ;
}
return 0 ;
}
运行结果:
child msgget error: Success
parent msgget error: Success
程序要完成:子进程向父进程 利用消息队列发送数据功能.
真搞清楚msgget()里面的参数是怎么样的?几本书上也没说清楚 那位大哥帮我改下,先谢谢了。 |
|