将iostream关联到文件描述符

2013年6月12日 由 Creater 留言 »

iostream提供了比较方便的I/O操作,然而,unix和linux的API中,用于交换数据的是int类型的文件描述符(file descriptor),这两者之间的转换是一个问题,竟然没有一个标准的做法!原因是unix的文件描述符实现并非ANSI标准。这里不多说旧式C语言的FILE*,只列出了用GNU gcc扩展实现的通过文件描述符来构建iostream对象的方法。

#include <ext/stdio_filebuf.h>
using namespace __gnu_cxx;
using namespace std;

int main(int argc, argv)
{
	int fd1, fd2;
	fd1 = open("foo", O_RDONLY );
	fd2 = open("bar", O_WRONLY);
	
	stdio_filebuf<char> bufi(fd2[0], ios_base::in);
	istream fin(&bufi);
	stdio_filebuf<char> bufo(fd1[1], ios_base::out);
	ostream fout(&bufo);
	string line;
	while (getline(fin, line))
	{
		fout<<line<<endl;
	}
	return 0;
}
广告位

发表评论

你必须 登陆 方可发表评论.