当前位置: 代码迷 >> Android >> Android NDK重定向std:cout输出到log
  详细解决方案

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

热度:52   发布时间:2016-04-28 02:05:22.0
Android NDK重定向std::cout输出到log

第一步,继承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输出了。

  相关解决方案