2016-11-29 4 views
0

Я пытаюсь создать сервер, на котором он слушает 2 порта и что-то делает с входящими данными, при этом распечатывает каждую точку каждую секунду, чтобы люди знали, что она все еще работает. Я хочу сделать это, используя fork(). Я пытаюсь:C forking не работает

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) - дочерний процесс не (p> 0). –

+2

Отсутствие перевода строки в конце '' inhere '', таким образом, захват этого в буфере исходящей строки стандартной библиотеки является моим первым предположением. Не знаю, почему есть другой вызов fork() 'там. – unwind

+0

Согласно моей справочной странице для 'sleep', параметр - это количество секунд для сна. 'sleep (1000000000000000);' может спать немного дольше, чем вы намерены. – Gerhardh

ответ

0

Детский процесс получает 0 в качестве возвращаемого значения. Вы можете вызвать fflush (0) сразу после вызова printf и посмотреть, помогает ли это.