2012-11-24 28 views
1

我有一個C中的情況,我想調用fopen時調用c函數。這意味着我想擁有某種「虛擬文件」。當我在這個「虛擬文件」上使用fopen時,我想調用一個函數來生成文件中的數據。使用C函數時調用函數或程序fopen

這可能嗎?

謝謝!

+0

如果你在linux上,fopencookie是要走的路。 – fuz

回答

1

沒有直接的方法可以調用函數來產生輸出。但是,您可以使用popen()調用另一個進程,這可能足以滿足您的需求。

+0

問題是我有我無法控制的第三方FTP服務器。我只是使用FTP客戶端來瀏覽文件,當我得到一個特定的文件時,我想動態地創建數據。也許這是在ttp服務器上的一個功能... – user1849016

+0

一些FTP服務器,也許https://security.appspot.com/vsftpd.html也可能有虛擬文件設施 –

1

在標準C這是不可能的,據我所知,

如果你使用的系統與GNU Glibc(如GNU/Linux的),你可以有custom streams,特別是通fopencookie

請注意,標準C++庫還提供(它自己的變體)流,並且您可以擁有自己的流。

在GNU/Linux,內核使您還提供file-system in user spaceFUSE

1

這意味着我想有某種形式的「虛擬文件」。當我在這個「虛擬文件」上使用fopen時,我想調用一個函數 生成文件中的數據。

要做到這一點,您需要編寫自己的文件系統。幸運的是,其他人已經做了很難的部分:看看FUSE。例如,你可能會寫一個文件系統,其中的「文件」實際上是RSS源。然後,您可以使用標準文件調用來讀取這些提要的數據。

現在,無論你應該採取這種方法是一個不同的問題。如果您控制正在讀取文件的代碼,那麼只需要調用appropraite數據提供功能,可能比要求安裝自定義文件系統更容易。

+0

是的,這是我的想法.. 。我正在考慮安裝某種只負責這些虛擬文件的虛擬文件系統。我會看看FUSE。 – user1849016