2011-11-08 10 views
0

enter image description hereFIFOサーバプログラム

上記のプログラムは、linuxで入力しました。基本的には、クライアントとサーバーを別々の端末に接続する必要があります。私は、正しい順序ですなわち

  1. コンパイルサーバを、それらを実行したときにでも - >実行サーバー
  2. コンパイルクライアント - >実行するクライアント

端末だけで何もしていけません。最初のprintfステートメントの"Trying to connect"部分を印刷することさえできません。ここのミスは何ですか?

EDIT

@parapuraのラジクマールが言ったように私はmkfifoの戻り値をチェック。しかしそれでも変わりません。ここに私の変更されたサーバーのコードがあります。

if(mkfifo("fifo1",0666)<0) { 
    printf("Error"); 
} 
if(mkfifo("fifo2",0666)<0) { 
    printf("Error"); 
} 
fflush(stdout); 
+0

、改行(' \ nの 'printf'を終了することをお勧めします')それは出力をフラッシュしてコンソールに表示されます。それで 'fflush'は必要ありません。 –

答えて

2

デッドロックが発生しました。サーバーは、オープン( "fifo1"、O_RDONLY)を待機し、クライアントはオープン( "fifo2"、O_RDONLY)を待機します。

編集いるclient.c:あなたは、いくつかの `printf`呼び出しを使用して1行に複数の印刷しようとしている場合を除き

int writefd = open("fifo1",O_WRONLY); 
int readfd = open("fifo2",O_RDONLY); 
+0

もっと明示的に言うと、fifoは通常他の誰かがそれを開いて接続できるようになるまでブロックします。 (少なくとも、デフォルトでは、非ブロックモードで開くことができますが、これは状況がより複雑になります)。 – wnoise

関連する問題