C++ Wrapper for pipe
2008-03-28 07:28:50来源: 阅读 ()
一、编译环境: g++ with libstdc++-v3
二、使用说明
本 Pipe 类是对 POSIX pipe 的封装,使用方法基本和 cin & cout 一样。其提供的接口如下:
1. 构造函数
- Pipe():默认构造函数,创建可读写的 Pipe 对象。
- Pipe(const int (&pfd)[2]):接受已创建好的 pipe 描述符数组作为参数,
创建可读写的 Pipe 对象。Pipe 内使用的是 dup 出来的描述符,所以如果你不再需要
使用作为参数的描述符,则需自行关闭。例如:
int fd[2];
pipe(fd);
Pipe p(fd);
// 如果不再需要使用刚才用 pipe 函数创建的描述符,请自行关闭
close(fd[0]);
close(fd[1]);
2. typedefs
- typedef std::iostream::char_type char_type;
- typedef std::iostream::int_type int_type;
- typedef std::iostream::traits_type traits_type;
- typedef std::iostream::iostate iostate;
3. 读操作(必须保证 Pipe 对象已创建成功才能使用以下方法,否则其行为未定义)
- Pipe& operator >>:用法和 cin >> 一样
- Pipe& getline(string& str, char_type delim = '\n'):从 pipe 里读取一行到 str 中。
用法类似 std::getline。
- Pipe& get(char_type& ch) :用法同 cin.get(ch)。如果已经关闭了 Pipe 对象的读操作,
则调用该函数的后果是未定义的
- int_type get():同 cin.get()。如果已经关闭了 Pipe 对象的读操作,则调用该函数的
后果是未定义的
- Pipe& putback(char_type ch):同 cin.putback(ch)。如果已关闭了 Pipe 对象的读操作,
则调用该函数的后果是未定义的
- Pipe& unget():同 cin.unget()。如果已关闭了 Pipe 对象的读操作,则调用该函数的
后果是未定义的
- int_type peek():同 cin.peek()。如果已关闭了 Pipe 对象的读操作,则调用该函数的
后果是未定义的
- Pipe& get(char_type* s, streamsize size, char_type delim = '\n'):
同 cin.get(s, size, delim)。如果已关闭了 Pipe 对象的读操作,则调用该函数的
后果是未定义的
- Pipe& getline(char_type* s, streamsize size, char_type delim = '\n'):
同 cin.getline(s, size, delim)。如果已关闭了 Pipe 对象的读操作,则调用该函数的
后果是未定义的
- Pipe& read(char_type* s, streamsize size):同 cin.read(s, size)。如果已关闭了
Pipe 对象的读操作,则调用该函数的果是未定义的
- std::streamsize gcount():同 cin.gcount()。如果已关闭了 Pipe 对象的读操作,
则调用该函数的后果是未定义的
- Pipe& ignore(streamsize size = 1, int_type delim = traits_type::eof()):
同 cin.ignore(size, delim)。如果已关闭了 Pipe 对象的读操作,则调用该函数的后果是未定义的
4. 写操作(必须保证 Pipe 对象已创建成功才能使用以下方法,否则其行为未定义)
- Pipe& operator <<:同 cout <<
- Pipe& put(char_type ch) :同 cout.put(ch)。如果已关闭了 Pipe 对象的写操作,
则调用该函数的后果是未定义的
- Pipe& write(const char_type* s, streamsize size):同 cout.write(s, size)。
如果已关闭了 Pipe 对象的写操作,则调用该函数的后果是未定义的
- Pipe& flush():同 cout.flush()。如果已关闭了 Pipe 对象的写操作,则调用该函数的
后果是未定义的
5. 常量
- enum PipeStream_t { pipe_rd, pipe_wr };
pipe_rd 指读操作,pipe_wr 指写操作
- static const iostate badbit = std::iostream::badbit;
- static const iostate eofbit = std::iostream::eofbit;
- static const iostate failbit = std::iostream::failbit;
- static const iostate goodbit = std::iostream::goodbit;
6. Pipe 对象状态(须保证 Pipe 对象已创建成功才能使用以下方法(第一个除外),否则其行为未定义)
- operator void*() const:用于判断 Pipe 对象是否处于合法状态。
例如:Pipe p; if ( !p ) //do something
- bool readonly() const:判断 Pipe 对象是否处于只读状态
- bool writeonly() const:判断 Pipe 对象是否处于只写状态
- bool readwrite() const:判断 Pipe 对象是否处于读写状态
- bool nonreadwr() const:判断 Pipe 对象是否处于既不能读也不能写的状态
- void clear(iostate state = goodbit):同 cin.clear(state)
- bool bad() const:同 cin.bad()
- bool eof() const:同 cin.eof()
- bool fail() const:同 cin.fail()
- bool good() const:同 cin.good()
7. 其它(必须保证 Pipe 对象已创建成功才能使用以下方法,否则其行为未定义)
- void close():关闭 pipe
- void close(PipeStream_t type):关闭 pipe 的指定操作(pipe_rd 或 pipe_wr)
- int pfd(PipeStream_t type):获取指定的 pipe fd。如果指定 fd 已关闭,则该调用的
后果是未定义的
- streamsize precision() const:同 cout.precision()。如果已关闭了 Pipe 对象的写操作,
则调用该函数的后果是未定义的
- streamsize precision(std::streamsize prec):同 cout.precision(prec)。
如果已关闭了 Pipe 对象的写操作,则调用该函数的后果是未定义的
三、实例:test.cpp。可用 gnu make 来编译该程序。
四、其它
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash