2011-05-23 83 views
12

只是一個簡單的問題:有沒有一種方法可以複製文件指針(由fopen()返回),類似於dup()重複由open()等函數返回的文件處理程序?複製文件指針?

基本上,我希望能夠做這樣的事情:

FILE *fp = fopen("some_file", "r"); 
FILE *fp2 = /* do something to duplicate the file pointer */; 
fclose(fp); // fp2 is still open 
/* do something with fp2 */ 
fclose(fp2); 

回答

10

你可以使用fileno得到一個描述符的FILE*dup了出來,然後用fdopen來從一個新的FILE*新的描述符。

+0

這似乎是一個很好的解決方案,謝謝:d – Frxstrem 2011-05-23 15:29:57

13
FILE *fp2 = fdopen (dup (fileno (fp)), "r"); 
+0

+1,談論醜小鴨片段:) – user7116 2011-05-23 15:35:10

+2

應該添加一些錯誤處理。 :-) – 2011-05-23 20:50:41

1

我打開了兩次相同的文件,並分配了兩個指針,並在最後關閉了兩個分開。在我的情況下,我不得不使用一個指針在文本窗口中顯示內容,並使用另一個指針處理文件中的數據。 例如

//define global variables 

FILE *fp1 = fopen("some_file", "r"); 

//fp1 used in functioncall to display textbuffer 

fclose(fp1); 

//fp2 used in functioncall to process data 

fclose(fp2);