zoukankan      html  css  js  c++  java
  • ACE第三个练习:ACE_Message_Block类

    /**
    	这个程序作用:
    		1.把所有的数据从标准输入读入到一个动态分配的ACE_Message_Black的单向链表中
    		2.这些ACE_Message_Black通过它们的后续指针连接在一起
    		3.所ACE_Message_Black链表中的所有连接的消息块打印到标准输出设备上
    		4.释放1中动态分配的内存
    */
    
    #include "ace/ACE.h"
    #include "ace/Message_Block.h"
    
    int main(int argc, char* argv[])
    {
    	ACE_Message_Block* head = new ACE_Message_Block(BUFSIZ);		// 头指针
    	ACE_Message_Block* mblk = head;									// mblk 即: message block
    
    	for (size_t recvd = -1; ; recvd = -1)
    	{
    		/**
    			ACE::read_n()
    			@功能: 会试图读取buf长度的数据;
    			@retrun: 如果遇到文件结束(EOF)或者错误则返回 0 或 -1,如果先到达了buf长度则返回数据区长度
    			@param4 记录了实际读取的数据长度.
    			@mark 
    				这里的mblk->size() = BUFSIZ = 512,
    				如果( 你的输入字节 < mblk->size() && read_n != EOF && read_n != 0 )
    					则read_n函数处于等待状态,不会执行下一条语句
    		*/
    		ssize_t nbytes = ACE::read_n(ACE_STDIN, mblk->wr_ptr(), mblk->size(), &recvd);
    
    		// 把写指针推进到缓冲区的末端
    		mblk->wr_ptr(recvd);
    
    		// 如果遇到EOF或错误,则退出循环
    		if (nbytes <= 0) break; 
    
    		// 分配消息块并把它存放在链表的尾部
    		mblk->cont(new ACE_Message_Block(BUFSIZ));
    
    		mblk = mblk->cont();
    	}
    
    	// 把链表中的内空打印到标准输出上
    	/**
    		以下for循环可以用:
    			ACE::write_n(ACE_STDOUT, head);
    		代替;
    			该方法使用了一个高效的集中写操作把通过消息块的cont()指针连接在一起的所有消息块打印出来
    	*/
    	for (mblk = head; mblk != 0; mblk = mblk->cont())
    	{
    		ACE::write_n(ACE_STDOUT, mblk->rd_ptr(), mblk->length());
    	}
    
    	// 释放链表中的所有内存
    	head->release();
    
    	return 0;
    };

  • 相关阅读:
    阅读笔记06
    阅读笔记05
    学习进度03
    四则运算03
    阅读笔记04
    求最大子数组值(有环版)
    合作项目02
    新的小组信息以及项目名称与介绍
    第六周进度条
    软件工程个人作业4(课堂练习&&课堂作业)
  • 原文地址:https://www.cnblogs.com/iapp/p/3631828.html
Copyright © 2011-2022 走看看