码迷,mamicode.com
首页 > 移动开发 > 详细

Android NDK重定向std::cout输出到log

时间:2015-03-12 20:53:29      阅读:686      评论:0      收藏:0      [点我收藏+]

标签:android ndk

第一步,继承std::streambuf

#include <iostream>
#include <streambuf>

class MyStreamBuf : public std::streambuf
{
	enum
	{
		BUFFER_SIZE = 255,
	};

public:
	MyStreamBuf()
	{
		buffer_[BUFFER_SIZE] = '\0';
		setp(buffer_, buffer_ + BUFFER_SIZE - 1);
	}

	~MyStreamBuf()
	{
		sync();
	}

protected:
	virtual int_type overflow(int_type c)
	{
		if (c != EOF)
		{
			*pptr() = c;
			pbump(1);
		}
		flush_buffer();
		return c;
	}

	virtual int sync()
	{
		flush_buffer();
		return 0;
	}

private:
	int flush_buffer()
	{
		int len = int(pptr() - pbase());
		if (len <= 0)
			return 0;

		if (len <= BUFFER_SIZE)
			buffer_[len] = '\0';

#ifdef ANDROID  
		android_LogPriority t = ANDROID_LOG_INFO;
		__android_log_write(t, "mylog", buffer_);
#else  
		printf("%s", buffer_);
#endif  

		pbump(-len);
		return len;
	}

private:
	char buffer_[BUFFER_SIZE + 1];
};

第二步,创建MyStreamBuf对象,并指定给std::cout

	MyStreamBuf g_MyStreamBuf;

	std::cout.rdbuf(&g_MyStreamBuf);
	
	//NOTE: std::endl会立即调用sync方法将缓冲区字符写入log,并不只是换行用
	std::cout << "hello " << 123 << std::endl;
	std::cout << "pi = " << 3.14 << std::endl;

这样,就可以是Eclipse的LogCat查看std::cout输出了。

Android NDK重定向std::cout输出到log

标签:android ndk

原文地址:http://blog.csdn.net/zaffix/article/details/44226503

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!