2011-09-06 65 views
3

我在Linux中有一個fmemopen文件描述符(指向父級中的緩衝區),我希望能夠在C中設置此文件描述符作爲子進程的標準輸入(我無法訪問代碼)將fmemopen ed文件描述符設置爲子進程的標準輸入

這可能嗎?如果是這樣,我該怎麼做?如果可能的話,我想避免寫入磁盤。

+0

澄清:你想使用mmap寫入一個沒有真正連接到真實文件的fd? –

+0

對不起,當我寫這個問題時,我使用了錯誤的函數,我真正想要的是一個fmemopen文件(即可以像文件一樣使用的一塊內存)。如果有必要,我想我可以把它全部推出標準,但我想避免這種情況。 – user439407

回答

1

這是不可能的。繼承stdin/out/err完全基於文件描述符,而不是stdio FILE流。由於fmemopen不會創建文件描述符,因此它不能成爲新進程的stdin/out/err或以任何方式用於進程間通信。你要找的是一個管道,除非你需要尋找,在這種情況下你需要一個臨時文件。 tmpfile函數可用於創建一個函數,而不必擔心在文件系統中顯示可見的名稱。

0

我不確定您是否可以直接使用您的fd(如果,那麼您將會做dup2()),但如果沒有,您可以創建一個pipe()供給您的內存數據並且客戶端可以接收它。在這裏,你可能必須在fork()之後dup2()

0

只要你mmaped文件描述符分叉之前更換文件描述符0

int fd = ...; 
dup2(fd, 0); 
fork(); 
+1

呃..最好在分叉後做這個* –

+0

你是對的!我在想exec() – arnaud576875

相關問題