我需要使用我無法修改的遺留庫來處理一些數據。我的問題是,它需要一個普通的舊FILE句柄來保存它的結果,並且我不需要在磁盤上寫任何東西。獲取文件*句柄,而不實際創建磁盤上的文件
我明白,沒有標準的方法來做到這一點,但它可能使用Windows API,boost或其他任何東西,以獲得有點指向內存的文件句柄?
我沒有發現一個解決方案,它明確保證沒有(系統地)執行光盤訪問。
我需要使用我無法修改的遺留庫來處理一些數據。我的問題是,它需要一個普通的舊FILE句柄來保存它的結果,並且我不需要在磁盤上寫任何東西。獲取文件*句柄,而不實際創建磁盤上的文件
我明白,沒有標準的方法來做到這一點,但它可能使用Windows API,boost或其他任何東西,以獲得有點指向內存的文件句柄?
我沒有發現一個解決方案,它明確保證沒有(系統地)執行光盤訪問。
我相信你可以fopen
管道,使用管道語法:
fopen("\\\\.\\pipe\\WritePipe", "w+");
您需要創建使用CreateNamedPipe
管,事前,但一旦你這樣做,你應該能夠使用管道用於處理數據。
你可能需要創建一個線程從管道中讀取,以確保您的應用程序將不會掛,但它應該爲您的工作需要(不能夠觸摸到文件系統)
非常感謝。我希望有一個更簡單的解決方案,但我會探討這種可能性。 – Jem
嘗試用
fmemopen
從How to write to a memory buffer with a FILE*?
tbert的回答是:
對於任何其他人在這個線程上絆倒尋找一個正確的 答案:是的,有一個標準兼容的方式來使用內存作爲 文件描述符:fmemopen或open_memstream,這取決於你想要的 語義。的
http://pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html
http://pubs.opengroup.org/onlinepubs/9699919799/functions/open_memstream.html
謝謝。這些功能在Windows上不可用,但對於任何使用Linux的人來說,這仍然是一個有效的答案。 – Jem
可能重複的[使一個文件指針讀/寫至內存中的位置](http://stackoverflow.com/questions/5135854/make-a-文件指針讀寫到內存中的位置) –
這種可能的重複只討論基於Linux的解決方案,根本不提windows。 – Jem
http://stackoverflow.com/questions/313111/dev-null-in-windows可能的重複。特殊文件名「NUL」似乎是答案,但我從來沒有使用它。 – Dariusz