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;
    };

  • 相关阅读:
    团队冲刺第二天站立会议
    团队冲刺第一天站立会议
    Scrum仪式之Sprint计划会议
    软件需求分析
    我们的团队
    No.1_1 java语言基础_学习笔记
    java 基础学习
    LoadRunner 11 安装及破解
    Linux查看程序端口占用情况
    windows 下查看端口占用命令
  • 原文地址:https://www.cnblogs.com/iapp/p/3631828.html
Copyright © 2011-2022 走看看