50,528
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
void err_sys(string msg)
{
cout << msg << endl;
exit(-1);
}
int main()
{
int input[2];
int output[2];
int pid;
FILE *log;
if(pipe(input)<0)
err_sys("pipe input error");
if(pipe(output)<0)
err_sys("pipe output error");
if((pid = fork()) < 0)
err_sys("fork error");
if(pid==0)
{
cout << "child proc" << endl;
//child
close(input[1]);
close(output[0]);
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
if(dup2(input[0], STDIN_FILENO) != STDIN_FILENO)
err_sys("dup2 error to stdin");
if(dup2(output[1], STDOUT_FILENO) != STDOUT_FILENO)
err_sys("dup2 error to stdout");
if(dup2(output[1], STDERR_FILENO) != STDERR_FILENO)
err_sys("dup2 error to stderr");
/***process the buf***/
system("java -cp /home/tiger/test/java ptest");
}
else
{
cout << "parent proc. child proc id=" << pid << endl;
//parent
close(input[0]);
close(output[1]);
char buf[100];
string temp="input from c father";
write(input[1], temp.c_str(), temp.length());
while(true){
sleep(2);
int n= read(output[0], buf, 100);
//buf[n]='\0';
printf("c read length=%d, content=%s\n", n, buf);
}
}
exit(0);
}
import java.io.PrintWriter;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
public class ptest {
public static void main(String args[]) throws Exception{
System.out.println("java start0");
BufferedReader consoleInput = new BufferedReader(new InputStreamReader(System.in));
PrintWriter writer = new PrintWriter("output.log");
writer.println("Start");
writer.flush();
boolean readflag = false;
while(true){
System.out.println("java start4");
writer.println("enter while");
writer.flush();
try {
System.out.println("java start5");
for(String read; (read = consoleInput.readLine())!= null && read.length()>0;)
{
String str = "read in java: " + read;
writer.println(str);
writer.flush();
System.out.println(str);
//System.out.flush();
read = "";
readflag = true;
writer.println("readline end");
writer.flush();
}
writer.println("for end");
writer.flush();
if (readflag)
{
System.out.println("read end");
//System.out.flush();
writer.println("while end");
writer.flush();
break;
}
System.out.println("read continue");
//System.out.flush();
}
catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("java end");
//System.out.flush();
writer.println("java end");
writer.flush();
}
}