2015-09-28 32 views
0

我正在使用管道(bash腳本)。我在一個管道$server中寫入,並從另一個管道$serverPID中讀取。這是客戶端的代碼示例:無法從FIFO獲取數據

echo "Get var" 
mkfifo "${server}$$" 
echo "$$ 2" > $server 
read var < "${server}$$" 
echo "var: ${var}" 

這是服務器的示例代碼:

int fd; 
if ((fd = open(fifo, O_RDWR)) == -1) { 
    fprintf(stderr, "Could not open fifo"); 
} 

ssize_t written; 

written = write(fd, buf, strlen(buf)); 
if (written == -1) { 
    fprintf(stderr, "Could not write into fifo");       
} 
printf("written %d into %s\n", written, fifo); 

我看到所有數據成功地寫,但我得到沒有出現寫入的數據在客戶端等待。哪裏有問題?

+0

我在客戶端添加'&'但沒有結果。如果我僅終止服務器,則獲得結果 –

+0

您正在寫入客戶端中的文件,而不是fifo。你的意思是'echo「$$ 2」>「$ server $$」'? – chepner

回答

0

添加close(fd)解決了問題

+0

你也可以做'fflush(fifo)'。 – Barmar