【 在 deardragon (【老农】快意灌水站210.38.248.1) 的大作中提到: 】
: 你把 talk.c 中的
: ^^^^^^ 改成 dev
: 试试看。
经过无数次失败的考验,终于解决了在SOLARIS上的显示发呆时间的问题。
当然首先得说说我用的系统:SOLARIS2.5.1+KCN FB3.0C
(好象很少看到哪位同志用SOLARIS架BBS,难道我一不小心真的成了吃螃蟹的?)
症状是一到环顾四方的时候就断线,后来一步步跟踪,发现程序最后运行到talk.c
里的idle_str()就翘辫子了。
没有用BBSRF,而是BBSD,所以在talk.c的idle_str()那段程序里,取的发呆时间
是 diff = time(0) - *(time_t*)(uent->tty+1);
但无数次试验结果告诉我,这句话行不通。//faint..
参看main.c的u_enter里有这么一段:
#ifdef SHOW_IDLE_TIME
if (tty_name[0])
strncpy( uinfo.tty, tty_name, 20 );
else {
time_t now;
now=time(0);
memcpy(uinfo.tty+1,&now,sizeof(time_t));
uinfo.tty[0]=0;
}
#endif
这里是把tty字符数组的第一个字节填成了0,后面跟着一个time_t值 。
那么要做的就应该是把这个time_t值取出来,所以我把talk.c里的上面那句话改了改:
time_t last;
memcpy(&last, uent->tty+1, sizeof(time_t));
diff = time(0) - last;//*(time_t*)(uent->tty+1);
编译运行后,测试结果正确。但说实话,我实在不能理解原来那句话有什么错,
也许是在SOLARIS上这么强制类型转换会出错,所以改成这种比较保险一点的作法
后,就OK了。
不知道这个对其他同志是否会有些帮助,哪怕是提您一个醒,也不枉我敲这半天字了.:)
--
FROM 202.112.145.51