这个问题放在CU三天了,居然没有人能帮我,200分在这里征集正解!!!

NC 2006-08-20 09:13:58
下面的程序:
#include <sys/msg.h>
#incude <stdio.h>
#include <errno.h>
void main()
{
int msqid,ret;
struct msg
{
long msgtype;
char text[9000];
}message;
msqid = msgget ( atol ( "10000") , 0666|IPC_CREAT );
tryagain:
ret = msgrcv ( msqid , &message , 9000 , 0l , IPC_WAIT );
if ( ret )
{
if ( errno== EINTR )
goto tryagain;
else {
printf ( "errno=%d\n" , errno );
exit (-1)
}
}
printf ( "msg len=[%d] , text=[%s]\n" , ret , message.text );
goto tryagain;
}
我在aix 下用dbx -a 进程号 attach 上去后就执行命令n,发现运行到 if ( errno==EINTR ) 这一行,并且判断为真.和我预先设想的一样.
但在sco 5.07用 dbx a.out 进程号 attach上去后就不知道执行到哪里了,执行命令n就死在那里了,不执行n的话,直接p 打印errno的值为零.

为什么会这样?是不是sco 下面对用attach 方式进行调试支持得不够好,只能用dbx 程序名 的方式 进行静态调试?我到底该怎么做,才能达到和在AIX下的效果?请各位高人指点,小弟先谢过了!
...全文
494 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjmhjms 2006-09-04
  • 打赏
  • 举报
回复
没做过,帮你顶顶!
MagicCarmack 2006-08-21
  • 打赏
  • 举报
回复
我想问一下楼主,这里是CU么?
yjf7888 2006-08-21
  • 打赏
  • 举报
回复
CU的高手应该比这里多吧
qdhuxp 2006-08-21
  • 打赏
  • 举报
回复
没做过,帮你顶顶!
NC 2006-08-21
  • 打赏
  • 举报
回复
真的没有兄弟在这两个OS下做过类似的工作么?我再等!
Eddie005 2006-08-21
  • 打赏
  • 举报
回复
这个小区人气也不行~~
YanDong_8212 2006-08-21
  • 打赏
  • 举报
回复
会不会是sco下把goto一起执行了?
只是猜测,linux下可以用step,dbx应该也能step进函数本身.你试试呢
slone 2006-08-21
  • 打赏
  • 举报
回复
-g 编译程序再看啦, if ( ret ) 改改分 >0 ==0 <0 三种情况再看看,没准儿两个OS 对于msq 内部实现真不一样的
dchg2000 2006-08-20
  • 打赏
  • 举报
回复
up
接分
没怎么用过sco

23,128

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧