Как я могу увидеть вывод в терминале для процесса, сгенерированного с помощью fork () - PullRequest
0 голосов
/ 21 августа 2011

Я написал код для одновременного сервера. Я хочу видеть вывод в терминале для дочернего сокета сервера, который генерируется вызовом 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 Ответ

2 голосов
/ 21 августа 2011

Обычно процесс forked () разделяет дескрипторы своих родительских файлов, в частности он должен иметь тот же stdout. Поэтому я думаю, что вы сможете увидеть результат без каких-либо специальных настроек.

...