| outman |
2011-08-19 23:47 |
windows管道——小型C++类
最近因为种种原因要用到管道,所以就研究了下windows的管道功能,结果一看到一大堆参数就头晕-、-看那短短的200来字教程看了半小时 最后发觉原来照抄就可以了-、- 于是为了便于以后我的使用,就写了个类废话不多说 上代码 http://down.qiannao.com/space/file/gaotongxiao/share/pipe.rar/.page 没错,这是个头文件~在这个头文件里,我定义了两个常量:my_cin和my_cout 下面是每个函数的用法:构造函数 pipe(char*) 可以设置欲运行的文件路径,如果是子进程使用pipe的话必须填入son void setfile(char*) 可以设置欲运行的文件路径const char* get() 获取子进程(或父进程)在管道中写入的数据,返回一个字符串 void in(bool,HANDLE) 设置往子进程的输入方式,bool为0时恢复默认,为1时设置输入通过HANDLE读取,可以使用my_cin,意为输入通过当前输入管道输入void out(bool,HANDLE) 同上,更改输出方式,可以使用my_cout bool send(const char* str) 向对应进程的输入管道发送字符串bool run() 设置完毕,运行之 来一个简单点的实例:
- //父进程
#include "pipe"#include <iostream> int main(){pipe a("d:\\a.exe"); //或者可以这样a.setfile("d:\\a.exe"); if(!a.run()){std::cout<<"error!";exit(1);}//运行d:\a.exe //注意这里用\\ 因为一个\是转义符while(1){ std::cout<<a.get();//a.exe所有标准输出都会写入管道,由类pipe读出} return 0;}
- //子进程a.exe
#include <iostream>int main(){ std::cout<<"hello world!";return 0; }
结果当然是这样的
最后一个例子咯-、-
- //父进程[
#include "pipe"#include <iostream> using namespace std;int main(){ pipe a("a.exe");a.run(); a.send("hello[color=#ff0000]\n[/color]");//注意while(1)cout<<a.get(); return 0;}
- //子进程
#include "pipe" #include <iostream>using namespace std; int main(){pipe a("son"); char b[10];cin>>b; a.send(b);return 0; }
结果同上 看得出来,假如父进程中输入用默认管道,而子进程中使用cin的话,就必须在发送的字符串后加上\n才能让cin接收到数据。 |
|