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」というエラーが発生します。