2016-11-29 14 views
0

私は、2つのポートを傍受し、着信データで何かをするサーバーを作ろうとしています。私はfork()を使ってこれをやりたい私がしようとしている:これも、子プロセスでinhere文字列を出力しません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); 
      } 
      } 
... 

。私は間違って何をしていますか?

+0

(p == 0)は、子プロセスではありません(p> 0)。 –

+2

'" inhere "の最後に改行がないので、標準ライブラリの出力行バッファにそれをトラップすることが私の最初の推測です。なぜそこに別の 'fork()'呼び出しがあるのか​​分かりません。 – unwind

+0

私の「スリープ」のマンページによると、パラメータはスリープする秒数です。 'sleep(1000000000000000);'はあなたが意図したより少し長くスリープするかもしれません。 – Gerhardh

答えて

0

子プロセスは戻り値として0を取得します。 printf呼び出しの直後にfflush(0)を呼び出し、それが役立つかどうかを確認することができます。

関連する問題