找回密码
 注册
查看: 781|回复: 1

这个信号是哪里来的?

[复制链接]
发表于 2006-5-10 13:21:49 | 显示全部楼层 |阅读模式
if(-1 == (msgid = msgget(MSG_KEY_CONFS, IPC_CREAT | IPC_EXCL | 0666)))
{
        if(-1 == (msgid = msgget(MSG_KEY_CONFS, 0666)))
        {
                DBG("msgget err");
                goto err;
        }
}

创建消息队列,这里是没有问题的。


下面是消息接收部分
while(msgsize = msgrcv(msgid, &msg, sizeof(msg_conf_t), 0, 0))
{
        if(-1 == msgsize)
        {
                DBG("msgrcv Warning: %s", strerror(errno));
                //goto err;
                continue;
        }
……………………
正常情况下是没有问题的,但是只要把进程用CTRL+Z和bg命令后,这里msgrcv就返回-1, 并且DBG出来的错误信息是Interrupted system call,
系统不是用信号吗?怎么有消息呢?
请教高手这是为什么????
发表于 2006-5-10 15:46:23 | 显示全部楼层
CTL+Z信号把msgrcv()函数中断掉了,
msgrcv()函数是用来接受消息的,但是CTL+Z却可以中断一个函数的执行.
要想程序不受CTL+Z的影响,可以先屏壁掉CTL+Z之类的信号,让系统不处理CTL+Z产生的信号.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-7 00:50 , Processed in 0.035496 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表