May*_*aya 5 c++ python unix pipe
我将从简要解释我的程序开始,然后我将转到我的问题.我创建了一个执行以下操作的双向管道:
附加的字符串被发送回父进程,只是将它们打印出来.
父进程:子进程:测试数据
这些是我的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;
}
Run Code Online (Sandbox Code Playgroud)
test.py:
import sys
data=sys.stdin.readline()
sys.stdout.write("CHILD PROCESS: "+data)
Run Code Online (Sandbox Code Playgroud)
我的问题是: 我有一个文本文件(让我们称之为test.txt),其中包含几行数据,我希望能够使用前面的代码但不是发送一个字符串值(TEST DATA)我想发送整个文本文件的内容..任何提示?
在 C 程序中,您必须创建一个缓冲区来读入文件,然后将其发送到管道。如果缓冲区小于文件,则需要多次读取。管道可能无法一口气完成完整写入,因此您可能需要多次写入。这通常是通过读取一些数据的外部循环,然后写入数据的内部循环来完成的......然后重复直到文件传输完成。\xe2\x80\x93 tdelaney
\n| 归档时间: |
|
| 查看次数: |
533 次 |
| 最近记录: |