파이프를 통해 bc를 사용하여 char 표현식의 답을 얻으려고합니다. 먼저 pipe1에 식을 쓰고 싶습니다. 그러면 bc가 pipe2에서 응답을 읽고 씁니다. 이를 위해 입출력을 변경하고 있습니다. 때로는파이프와 포크를 통해 bc 사용
(standard_in) 2: illegal character: ^@
: 나는 탭을 선언하는 경우
가write(pipe1[1], "20*5\n", sizeof("20*5\n")-1) != sizeof("20*5\n")-1)
는하지만,이 오류가 계속 : 나는 문자 []를 사용하여 바로 쓰기의 표현을 넣어하지 않는 경우이 작동합니까 2 대신 1입니다.
내가 뭘 잘못하고있는거야? 누군가가 나를 설명 할 수 있다면, 고마워.
코드 :
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
char resultat[5];
int pipe1[2];
int pipe2[2];
pipe(pipe1);
pipe(pipe2);
int resultat_fork = fork();
if (resultat_fork == -1)
{
exit(EXIT_FAILURE);
}
char* expression = "20*5\n";
if (resultat_fork != 0)
{
//printf("I am the parent\n");
close(pipe1[0]);
close(pipe2[1]);
if (write(pipe1[1], expression, sizeof(expression)) != sizeof(expression))
fprintf(stderr, "write to child failed\n");
int nbytes = read(pipe2[0], resultat, sizeof(resultat));
if (nbytes <= 0)
fprintf(stderr, "read from child failed\n");
else
printf("resultat: %.*s\n", nbytes, resultat);
close(pipe1[1]);
close(pipe2[0]);
}
else
{
printf("I am the child\n");
close(pipe1[1]);
close(pipe2[0]);
dup2(pipe1[0], 0);
dup2(pipe2[1], 1);
close(pipe1[0]); /* More closes! */
close(pipe2[1]); /* More closes! */
execlp("bc", "bc", NULL);
fprintf(stderr, "Failed to execute bc\n");
exit(EXIT_FAILURE);
}
return 0;
}
변수'expression'은 포인터가 아니라 배열입니다. 'sizeof' 대신'strlen()'을 사용하십시오. (나는이 질문의 이전 변종에 대한 나의 이전 대답에 대한 해설에서'strlen()'을 사용했다.) –
괜찮아, 제 사과를 받아 들여주세요, 나는 그 순간에 정말로 그것을 얻지 못했습니다. – Karl
사과가 받아 들여짐 - 유용한 정보의 덩어리를 논평의 해독 (답변 내외부) 사이에서 발견하는 것은 어려울 수 있습니다. –