2016-03-27 9 views
1

私は、ファイルポインタ(FILE * file)を受け取り、そのファイル内のすべてをコピーする関数を持っています。さて、このファイルの中のすべてを消去することは可能ですか?どのようにファイル名なしでファイルの内容を取り除きますか?

ファイル名がないので、もう一度fopen(filename, "w")を使用することはできません。

私にはstdio.hstring.hが含まれています。

+3

私はdownvotingに同意しません。面白いことです。 –

+0

'巻き戻し(fp); fprintf(fp、 ""); ' – stackptr

+0

@stackptr:あなたが表示するスニペットは、ファイルの先頭に何も書き込まれません。 1バイトも切り捨てられません。 – alk

答えて

7

ftruncate()システムコールを使用すると、ファイル記述子を使用してファイルを空にすることができます。

ftruncate(fileno(fh), 0); 

おそらく、いずれかが、さらにかなり前のオフセットよりも、最初に作られたファイルへの書き込みようrewind(fh)への呼び出しでそれをフォローアップすることになるでしょう。

+0

'ftruncate()'は 'unistd.h'でプロトタイプ化されていることに言及する価値があります。 – alk

+0

unistd.h関数を使用せずにファイルを消去することは不可能です。 –

+0

もしstdioを使って*行う方法があれば私は驚くことはありませんが、もしあれば、この方法よりははるかに明らかではありません。 – duskwuff

関連する問題