C++ Wrapper for pipe

2008-03-28 07:28:50来源: 阅读 ()

新老客户大回馈,云服务器低至5折

一、编译环境: 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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 在c#.net中将查询数据导入excel表输出_c#应用

下一篇:避免 C/C++ 程序一闪而过的方法