由叉產生的過程我寫代碼併發服務器。我希望看到在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);
}
}
,但我沒有在終端
也許問題是,'閱讀()'還沒有恢復?你可以嘗試在'str_echo'的開頭加上'print',看看你是否看到了。 – Owen
父進程的stdout是否重定向?你能不能在fork,printf,exit和wait之類的代碼中重現這個問題? –