回首页 回首页 ◎ 设为首页  
◎ 收藏本站  
◎ 给我留言  
  
  首 页  C/C++教程  C++之父的FAQ  C/C++动向  C/C++源代码  C/C++误区  Unix/Linux  下载中心  乱七八糟  蚂蚁的Blog  
  当前位置:首 页 >> Unix/Linux >> Unix/Linux 编程 >> C++ Wrapper for pipe
最 近 更 新
C++ Wrapper for pipe推荐
[转][图文] 教你把Vim改..推荐
[转] Epoll用法举例说明推荐
[转] epoll 为我们带来..
Syn Flood 攻击(C 语言..推荐
Unix 下模拟 TC 的 getc..
[转] GCC 安装指南推荐
[转] C 编译器 GCC 简单..
最 新 推 荐
C++ Wrapper for pipe推荐
[转][图文] 教你把Vim改..推荐
[转] Epoll用法举例说明推荐
Syn Flood 攻击(C 语言..推荐
[转] GCC 安装指南推荐
热 门 排 行
[转] C 编译器 GCC 简单..
[转] GCC 安装指南推荐
[转][图文] 教你把Vim改..推荐
Syn Flood 攻击(C 语言..推荐
Unix 下模拟 TC 的 getc..
[转] Epoll用法举例说明推荐
C++ Wrapper for pipe推荐
[转] epoll 为我们带来..
站 内 搜 索

Web stdcpp.cn
关键词

搜索方式

搜索范围

精确匹配
广 告

C++ Wrapper for pipe


来源:蚂蚁的 C/C++ 标准编程 作者:Antigloss 等级:精品
发布于2007-12-13 21:48 被读553次 【字体:

源代码下载:pipe.zip
解压密码:stdcpp.cn

一、编译环境: 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 来编译该程序。

四、其它

希望大家踊跃试用,指出其不足之处、bugs,以及有待改进的地方。谢谢!


Antigloss @ http://stdcpp.cn
2007-12-13

本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 Antigloss 共同所有,转载请注明原作者和出处。谢谢。



相关专题:暂无相关专题

上一篇:[转][图文] 教你把Vim改装成IDE
下一篇:无相关文章

共有评论 2 条 网友评分 5分 查看全部评论

游客:S
评分:5
又有新的啦 加油
游客:金庆
评分:5
有没有跨平台的pipe的封装?

查看全部评论

【发表评论】 评分:1分 2分 3分 4分 5分


验证码:

Powered By Www.Xydw.COM Ver1.14 管理
Copyright © 2005-2006 蚂蚁的 C/C++ 标准编程 All Right Reserved. XCMS
粤ICP备06014124号   站长:Antigloss