我知道这个问题已经被问了十亿次,但是所有的解决方案都对我不起作用。我需要通过套接字将一个流式传输到客户端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
用 simple替换时write
,客户端会正确打印答案。但是当我执行上面的代码时没有任何反应,我没有得到任何字节。我已删除dup2
呼叫,但没有得到任何输出execvp
。
在这里变得非常绝望,尝试了pipe
我能找到的任何东西。我哪里做错了?该命令本身也可以,可以在 shell 上运行,并且execvp
调用不会引发错误。