当前位置:  开发笔记 > 编程语言 > 正文

通过双向管道传递文件内容

如何解决《通过双向管道传递文件内容》经验,为你挑选了0个好方法。

我将从简要解释我的程序开始,然后我将转到我的问题.我创建了一个执行以下操作的双向管道:

    父进程将字符串值传递给子进程(在我的程序中,字符串值为"TEST DATA")

    子进程从其父进程读取传递的数据,并执行一个简单地将两个字符串连接在一起的python文件(从父进程"TEST DATA"接收的字符串和"CHILD PROCESS:")

    附加的字符串被发送回父进程,只是将它们打印出来.

    执行此程序后,输出将如下所示:

父进程:子进程:测试数据

这些是我的C++和python程序代码:

test.cc:

#include 
#include 
#include 
#include 
#include 

int main()
{
  int writepipe[2] = {-1,-1};// parent -> child
  int readpipe[2] = {-1,-1};//child -> parent
  pid_t childpid;

  if(pipe(readpipe) < 0 || pipe(writepipe) < 0)
    {
      //cannot create a pipe
      printf("error creating pipe");
      exit(-1);
    }
#define PARENT_READ readpipe[0]
#define CHILD_WRITE readpipe[1]
#define CHILD_READ writepipe[0]
#define PARENT_WRITE writepipe[1]

  if((childpid=fork())<0)
    {
      //cannot fork child
      printf("cannot fork child");
      exit(-1);
    }
  else if (childpid==0)
    {//child process
      close(PARENT_WRITE);
      close(PARENT_READ);
      dup2(CHILD_READ,0); //read data from pipe instead of stdin
      dup2(CHILD_WRITE , 1);//write data to pipe instead of stdout
      system("python test.py");
      close(CHILD_READ);
      close(CHILD_WRITE);
    }
  else
    {
      close(CHILD_READ);
      close(CHILD_WRITE);
      //do parent stuff
      write(PARENT_WRITE,"TEST DATA\n",23);
      int count;
      char buffer [40];
      count=read(PARENT_READ,buffer,40);
      printf("parent process: %s",buffer);
    }
  return 0;
}

test.py:

import sys
data=sys.stdin.readline()
sys.stdout.write("CHILD PROCESS: "+data)

我的问题是: 我有一个文本文件(让我们称之为test.txt),其中包含几行数据,我希望能够使用前面的代码但不是发送一个字符串值(TEST DATA)我想发送整个文本文件的内容..任何提示?

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有