如何在终端中查看fork()生成的进程的输出

时间:2011-08-21 07:48:57

标签: c network-programming

我为并发服务器编写了代码。我希望在终端中看到由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()的输出

1 个答案:

答案 0 :(得分:2)

通常forked()进程共享其父文件描述符,特别是它应该具有相同的stdout。所以我认为你应该能够在不做任何特殊设置的情况下看到输出。