我首先简要介绍一下我的程序然后我会转到我的问题。 我创建了一个执行以下操作的双向管道:
附加的字符串被发送回父进程,只是将它们打印出来。
父流程:儿童流程:测试数据
这些是我的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)我想发送整个内容文本文件.. 任何提示?
答案 0 :(得分:0)
在C程序中,您必须创建一个缓冲区来读取文件,然后将其发送到管道。如果缓冲区小于文件,则需要多次读取。管道可能无法完全写入一个gulp,因此您可能需要多次写入。这通常使用外部循环来读取一些数据,然后是内部循环来写入数据......然后重复直到文件传输完成。 - tdelaney