我需要关于 fork-server 的帮助。我想要做的是接受一个客户端然后分叉让其他客户端连接,同时将标准输出和错误重定向到客户端。然后客户端应该能够发送应该由位于孙子中的 execlp() 执行的字符串。
我无法找到我的逻辑错误..
在 main() 中:
while (1) {
t = sizeof(remote);
printf("Waiting for connection.\n");
s2 = accept(s, (struct sockaddr*)&remote, &t);
if (s2 == -1) {
perror("accept");
exit(1);
} else {
printf("Client connected.\n");
if(!fork()) {
close(1);
dup(s2);
handle(s2);
exit(0);
}
close(s2);
}
}
在句柄()中:
char str[100];
int n;
while(1) {
n = recv(client_socket, str, 100, 0);
if(n <= 0) {
perror("recv");
exit(1);
} else {
if(!fork()) {
execlp("/bin/sh", "sh","-c", str, NULL);
exit(1);
}
wait(0);
}
}
execlp 的结果未重定向到客户端并给出错误“sh: Can't open c”。