我为并发服务器编写了代码。我希望在终端中看到由fork()
调用生成的子服务器套接字的输出。客户端正在与子服务器套接字进行通信,我想查看客户端在服务器上写入的数据。那我怎么能在终端看到它?
我的服务器代码:
while(1)
{
clilen=sizeof(cliaddr);
connfd=accept(sockfd,(struct sockaddr*)&cliaddr,&clilen);
printf("connection accepted\n");
if((childpid=fork())==0)
{
close(sockfd);
printf("child process\n");
str_echo(connfd);
// str_echo(connfd);
exit(0);
}
printf("connection established\n");
str_echo()
void str_echo(int sockfd)
{
char buff[20];
ssize_t n;
while(1)
{
if((n=read(sockfd,buff,20))>=0)
write(sockfd,buff,20);
else
write(sockfd,"blank",20);
//else
printf("%s",buff);
// write(sockfd,buff,20);
//return;
//else
// writen(sockfd,buff,n);
}
}
但我没有在终端
的printf("%s",buff);
中获得上述str_echo()
的输出
答案 0 :(得分:2)
通常forked()进程共享其父文件描述符,特别是它应该具有相同的stdout
。所以我认为你应该能够在不做任何特殊设置的情况下看到输出。