Linux管道读写及重定向的一个简易代码

  • A+
所属分类:Linux 技巧

Linux管道读写及重定向的一个简易代码

先给出子进程执行的test程序(需先编译)

// test.cpp
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
 if (argc < 2)
 {
  cerr << "argc err" << endl;
 }
 while (--argc)
 {
  cout << *(++argv) << endl; // 输出传递进来的参数
 }
 return 0;
}

下面给出主程序文件

 // myduptest.cpp
#include <unistd.h>
#include <string>
#include <iostream>
using namespace std;
// 管道流向,子进程>>>>>>>>>父进程
// 子进程往管道写数据,父进程读取数据
int main()
{
 int fd[2];
 pid_t pid;

 pipe(fd); // 建立管道
 if ((pid=fork()) == -1)
 {
  cerr << "fork failed" << endl;
  exit(1);
 }
 if (pid == 0)
 {
  close(fd[0]); // 子进程关闭读
  dup2(fd[1], STDOUT_FILENO); // 重定向输出到写管道
  char * argin[] = {"/home/cailizhong/f72/linuxSock/linuNetworkProgram/test", "hello kitty", "ha ha", NULL};
  execvp(argin[0], argin); // 执行程序test,并传递参数给test程序
 }
 else
 {
  close(fd[1]); // 父进程关闭写
  dup2(fd[0], STDIN_FILENO); // 重定向读到读管道
  string ss;
  while (getline(cin, ss))
  {
   cout << "nbytes: " << ss.size() << endl;
   cout << "Received string: " << ss << endl;
   cout << "------------------------------------" << endl;
  }
 }
 return 0;
}

下面是主程序执行结果

nbytes: 11

Received string: hello kitty

------------------------------------

nbytes: 5

Received string: ha ha

------------------------------------

百分购

发表评论

您必须才能发表评论!