我将先简要介绍我的程序,然后再谈我的问题。我创建了一个双向管道,具体操作如下:
- 父进程将一个字符串值传递给子进程(在我的程序中,这个字符串值为“TEST DATA”);
- 子进程从父进程读取传递的数据并执行一个Python文件,该文件仅仅是将两个字符串连接在一起(从父进程接收到的字符串“TEST DATA”和“CHILD PROCESS: ”);
连接好的字符串被发送回父进程,父进程只需将它们打印出来。
- 执行此程序后,输出结果如下:
parent process: CHILD PROCESS: TEST DATA
以下是我的 C++ 和 Python 代码:
test.cc:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/wait.h>
#include <cstdlib>
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),而是发送整个文本文件的内容。 有什么提示吗?