2017-02-02 137 views
-2

我正在開發一個軟件項目,需要將一個過程的幾個值傳輸給另一個。我現在嘗試了更好的一半,但仍然沒有工作。有人能給我寫一個簡單的例子來說明如何做到這一點?如何通過命名管道(fifo)傳輸結構的內容?

+2

只需在結尾處「寫」結構,然後在另一端「讀」結構呢?你有什麼嘗試?你的嘗試有什麼問題?請[請閱讀如何提問問題](http://stackoverflow.com/help/how-to-ask)並學習如何創建[最小,完整和可驗證示例](http://stackoverflow.com /幫助/ MCVE)。 –

回答

1

編劇:

struct X foo = /* ... */; 

fwrite(&foo, sizeof foo, 1, outfile); 

讀者:

struct X foo; 

fread(&foo, sizeof foo, 1, infile); 

FILE指針infileoutfile通過打開相關的管道,大概是在POSIX文件描述使用fdopen獲得。

確保讀寫調用都返回1,否則出現錯誤。

+1

爲了正確處理部分寫入,最好將'size'參數設置爲'1',將count參數設置爲'sizeof foo'。 '1'的'count'參數使得這是不可能的。也許'fwrite(&foo,1,sizeof(foo),outfile);' –

+1

@AndrewHenle它取決於是否緩衝了'FILE *'。對Kerrek來說,這就是爲什麼我不會推薦使用stdio函數來讀取/寫入非文本數據的管道。使用'write'會使其成爲原子的(如果寫入的數據少於管道內部緩衝區)。 –

+0

@Someprogrammerdude:'write(2)'究竟是多少原子?這與其寫入的字節數相比是原子的,但可能只有一個字節。 –