2011-08-21 132 views
0

由叉产生的过程我写代码并发服务器。我希望看到在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); 
      } 
    } 

,但我没有在终端

+0

也许问题是,'阅读()'还没有恢复?你可以尝试在'str_echo'的开头加上'print',看看你是否看到了。 – Owen

+0

父进程的stdout是否重定向?你能不能在fork,printf,exit和wait之类的代码中重现这个问题? –

回答

2

获得输出上面printf("%s",buff);str_echo()通常分叉()进程共享它父母文件描述符,特别是它应该具有相同的stdout。所以我认为你应该能够看到输出而不做任何特殊的设置。

+0

没有我试图对服务器的代码: 如果((childpid =叉())== 0){ 接近 (的sockfd); str_echo(connfd); ((n = read(sockfd,buff,20))> = 0) write(sockfd,buff,20); 其他 写(的sockfd, “空白”,20); //别的 的printf( “%S”,浅黄色); 但是我没有得到在终端输出的printf( “%S”,浅黄色) –

+1

尝试'的printf( “%S \ n” 个,浅黄色);'。 – cnicutar

+0

@subh。唱歌对不起,如果这听起来像一个愚蠢的问题,但不是因为它被注释掉了吗?你也可以把代码放在问题中,以便更容易看到。 – Owen