免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5497 | 回复: 2
打印 上一主题 下一主题

msgget()函数问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-26 17:03 |只看该作者 |倒序浏览
#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()里面的参数是怎么样的?几本书上也没说清楚 那位大哥帮我改下,先谢谢了。

论坛徽章:
0
2 [报告]
发表于 2007-03-28 22:10 |只看该作者

if(msgid = msgget(IPC_PRIVATE, IPC_CREAT|0666))

判断条件错误

msgget出错时,返回值是-1

你这里返回的是0,实际上是成功了.

你的perror给来的也是Success

论坛徽章:
0
3 [报告]
发表于 2007-03-30 18:44 |只看该作者
哦,真是呀。低级错误。
谢谢你
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP