【发布时间】:2013-03-01 23:29:23
【问题描述】:
我需要关于 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”。
【问题讨论】:
-
在控制台“/bin/sh sh c”上执行此操作会得到什么
-
我猜是因为我在 fork 外部测试了 execlp 并且它可以工作。
-
当我在控制台中输入“/bin/sh sh c”时,我得到了同样的错误
-
str的值是多少?是否正确终止?