2011-11-08 91 views
0

enter image description here先進先出服務器程序

上述程序我在linux中輸入。它基本上必須在不同的終端中連接客戶端和服務器。但是,當我在正確的順序運行它們,即

  1. 編譯服務器 - >運行服務器
  2. 編譯客戶端 - >運行客戶

的終端只是不執行任何操作。它甚至不打印printf聲明的"Trying to connect"部分。這裏有什麼錯誤?

編輯

我查的mkfifo返回值@parapura拉庫瑪說。但它仍然是一樣的。這是我更改的服務器代碼。

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

除非你打算使用多個'printf'調用打印更上一個行,建議以結束'以新行printf'('\ n '),因爲這將刷新輸出,所以它顯示在控制檯中。那你就不需要'fflush'。 –

回答

2

您發生了死鎖。服務器等待打開(「fifo1」,O_RDONLY)和客戶端等待打開(「fifo2」,O_RDONLY)。

編輯client.c:

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

爲了更加明確,通常打開fifo會阻止,直到其他人打開它,以便它們可以連接。 (至少,默認情況下 - 它可以在非阻塞模式下打開,但這會使事情更加複雜。) – wnoise