배관 및 포크를 사용하여 C에서 작동하도록 노력하고 있습니다. "10 + 10 같은 조작"| bc파이프 2 개, 포크 1 개, Bc 및 execlp (C)
정확하게 말해서, 서버가 작업을 작성하고 bc가 읽히는 곳과 작업의 결과 (bc가 사용되는 곳)가 가서 서버가 그것을 읽고 printf 그것. 이를 위해 부모 프로세스와 하위 프로세스의 출력과 입력을 변경하려고합니다.
INT 주() {
int t1, t2;
char resultat[5];
int pipe1[2];
int pipe2[2];
pipe(pipe1);
pipe(pipe2);
int resultat_fork = fork();
if(resultat_fork == -1){
exit(EXIT_FAILURE);
}
if(resultat_fork!=0){
printf("I am the parent\n");
close(pipe1[0]);
close(pipe2[1]);
//We only want to write into pipe1 and read from pipe2, we can close the two other
write(pipe1[1], "20*5\n", 20);
//write on pipe1 the expression
read(pipe2[0], resultat, sizeof(resultat));
//read from pipe2 the answer (written by bc)
printf("resultat : %s\n",resultat);
close(pipe1[1]);
close(pipe2[0]);
}else{
printf("I am the children\n");
close(pipe1[1]);
close(pipe2[0]);
//We only want to write into pipe2 and read from pipe1, we can close the two other
dup2(pipe1[0], 0);
//redirection standard input to pipe1[0]
dup2(pipe2[1], 1);
//redirection standard output to pipe2[1]
execlp("bc", "bc", NULL);
//execute bc, which normaly will read the operation from pipe1 and write the answer into pipe2, but I think it's here the problem come out
close(pipe1[0]);
close(pipe2[1]);
}
return 0;
}
나는 있지만 오류와 정답을 받고 있어요 : "(standard_in)이 여기에
내 코드입니다 : 잘못된 문자 :^@ " "(표준 입력) 2 : 잘못된 문자 : : " 플러스 CTRL C를 눌러 종료해야합니다. BC에서 온 것 같지만 이유는 ...
내가 뭘 잘못하고 있니? 고맙습니다! 나는 예를 거의 보지 못했지만 파이프 하나만 던졌습니다.
귀하의 시험 부모/자식이 잘못되었습니다. 'fork()'가 0을 반환하면, 당신은 자식이다. 그렇지 않은 경우 반환되는 값은 본질적으로 값 1이 아닌 자식의 PID입니다. –
"나는 여기 있습니다"라는 메시지가 인쇄 되었다면 "나는 유치하고 있습니다"라는 두 프로세스를 보았을 것입니다. 그리고 나는 "나는 부모가된다"고 말하지도 않았다. –
답변 해 주셔서 감사합니다. 참으로 수치 스럽다. 나는 이것을 정말로 유감스럽게 생각한다. 지금 그것은 나를 계속 돌려 보낸다. "(standard_in) 1 : 불법적 인 문자 :^@".나는 그것이 제대로 사용되지 않는 dup2에서 온다고 믿지만, 확실하지 않다. – Karl