스트리밍 로 끝 나를 통해 출력 socket
문제
이 질문은 물었 억지만,모든 솔루션은 나를 위해 노력하고 있습니다.해 스트리밍 stdout
의 execvp
를 통해 소켓 클라이언트입니다.관련 클라이언트 코드를 이
static void execute_cmd(int fd, char *cmd, char **params) {
pid_t cid;
size_t i = 0, c = 0;
cid = fork();
if(cid == 0) {
close(STDOUT_FILENO);
dup2(fd, STDOUT_FILENO);
if(execvp(cmd, params) < 0) {
fprintf(stderr, "Could not execute \"%s\": %d\n", cmd, errno);
exit(1);
}
} else {
close(fd);
waitpid(cid, NULL, 0);
exit(1);
}
}
을 복사에 대한 답변을 이 질문.그러나 나는 아무것도 얻을 뒤로하려고 할 때 이 코드:
int sockfd = serverConnect();
write(sockfd, "echo math", 11);
n = read(sockfd, buffer, 1023);
printf("Got %d bytes\n", n);
printf("%s\n", buffer);
close(sockfd);
나는 트리플 검사에는 연결이 설정된다.때 나는 대체 execute_cmd
간단한 write
, 클라이언트는 올바르게 인쇄하는 대답이다.아무 일도 일어나지 않을 때 나는 코드를 실행하는,위의 나무 바이트다.내가 제거 dup2
전화과에서 출력 execvp
중 하나를 호출.
아주 절망하기도 pipe
무엇을 찾을 수 있다.나는 어디에서 잘못되었는?명령이 너무 작품에 포탄,그리고 execvp
전화 오류는 발생하지 않습니다.
해결책
로 위의 코드는 올바른 것입니다.문제는 잘못 사용하면 이전 strtok
는 결과 침묵의 충돌 strdup
.이 fork
위의 단순히 실행하지 않고 내 모든 테스트를 위 strtok
라인입니다.후에 넣 printf
s 으로 모든 라인의 코드를 찾을 수 있는 문제입니다.
솔직히,나는 바보 같은 느낌.
제휴하지 않습니다 StackOverflow