2011-05-23 14 views
12

すぐに質問:open()のような関数によって返されたファイルハンドラをdup()が複製するのと同様に、ファイルポインタ(fopen()によって返されたもの)を複製する方法はありますか?ファイルポインタを複製していますか?

基本的に、私はこのような何かを行うことができるようにしたい:から新しいFILE*を取得するためにfdopenを使用し、その後、および

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

あなたはFILE*の記述子を取得するためにfilenoを使用することができ、dup新しい記述子。

+0

、感謝:D – Frxstrem

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

+1、醜いアヒルの子スニペットについて話:) – user7116

+2

は、いくつかのエラー処理を追加する必要があります。 :-) –

1

同じファイルを2回開き、2つのポインタを割り当て、最後に両方を別々に閉じました。私の場合、1つのポインタを使ってテキストウィンドウにコンテンツを表示し、もう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); 
関連する問題