找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4119|回复: 5

ACE_Message_Block有BUG?

[复制链接]
发表于 2009-4-7 10:32:42 | 显示全部楼层 |阅读模式
以前没怎么用,这两天心血来潮试了一下,发现卷一的示例貌似有问题
ACE_Message_Block *head = new ACE_Message_Block(BUFSIZ);
ACE_Message_Block *mblk = head;
for(; ; )
{
  ssize_t nbytes = ACE_OS::read_n(ACE_STDIN, mblk->wr_ptr(), mblk->size());
  if(nbytes <= 0)
   break;
  mblk->wr_ptr(nbytes);
  mblk->cont(new ACE_Message_Block(BUFSIZ));
  mblk = mblk->cont();
}
for(mblk = head; mblk != 0; mblk = mblk->cont())
  ACE_OS::write_n(ACE_STDOUT, mblk->rd_ptr(), mblk->length());
head->release();

除了头文件包含错误之外,我输出BUFSIZ的大小时,是512,而Block输入完成后没有输出
于是我把BUFSIZ 自已DEFINE为10,发现输入大于10个字符时会有输出,小于时不会有输出
而且Ctrl+Z之前一行的输入输出不一致,请问这是为什么?
发表于 2009-4-7 17:41:04 | 显示全部楼层
没搞明白你的问题。
这个程序就是展示ACE_Message_Block的控制能力而已。你自己定小了缓冲区,可能会越界了。
 楼主| 发表于 2009-4-8 09:34:38 | 显示全部楼层

回复 #2 winston 的帖子

可是我使用默认的BUFSIZ(512)时,根本没东西打印出来呀
发表于 2009-4-8 12:41:32 | 显示全部楼层
自己追踪一下。
ACE_OS::read_n(ACE_STDIN, mblk->wr_ptr(), mblk->size());

从标准输入读取。
 楼主| 发表于 2009-4-9 16:25:38 | 显示全部楼层

回复 #4 winston 的帖子

我调试时发现
键盘输入时,每输完一行回车,程序并没有执行
  mblk->wr_ptr(nbytes);
  mblk->cont(new ACE_Message_Block(BUFSIZ));
  mblk = mblk->cont();
所以根本就没有形成Block链,最后Ctrl+Z,就直接Break了
请问ACE_OS::read_n()函数怎么知道此次输入结束?好像回车不是的呀
发表于 2009-4-9 17:44:55 | 显示全部楼层
ACE_OS::read_n()是读取到指定数量的信息后才返回啊。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 03:23 , Processed in 0.014273 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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