2016-11-29 84 views
0

我试图制作一个服务器,它监听2个端口,并对传入数据做一些事情,同时每秒打印出一个点,让人们知道它仍在运行。我想通过使用fork()来做到这一点。我想:C分叉不起作用

p = fork(); 
    if(p == 0){ 
     if(getsockname(sock1, (struct sockaddr *) &name1, &length1) == -1) { 
     perror("getting socket name"); 
     exit(3); 
     } 
     printf("Socket port #%d\n", ntohs(name1.sin_port)); 

     if(getsockname(sock2, (struct sockaddr *) &name2, &length2) == -1) { 
     perror("getting socket name"); 
     exit(3); 
     } 
     printf("Socket port #%d\n", ntohs(name2.sin_port)); 

    } 
    else if(p > 0){ 
     printf("inhere"); // 
     p1 = fork(); 
      if(p1 > 0) { 
      while(TRUE) { 
       write("."); 
       sleep(1); 
      } 
      } 
... 

这还不打印子进程inhere字符串。我究竟做错了什么?

+0

(p == 0)是一个子进程not(p> 0)。 –

+2

在''inhere''末尾没有换行符,因此将其陷入标准库的输出行缓冲区中是我的第一个猜测。不知道为什么在那里有另一个'fork()'调用。 – unwind

+0

根据我的'睡眠'的manpage,参数是睡眠秒数。睡眠(1000000000000000);'可能睡得比你想象的要长。 – Gerhardh

回答

0

子进程获取0作为返回值。您可能会在printf调用之后立即调用fflush(0),看看它是否有帮助。