2009-08-27 26 views
1

C++では、オープンされたファイルの先頭へのポインタを何とか取得して、ポインタ(ポインタ)をunix write関数に渡すことは可能ですかファイルのサイズ?C++でファイルの先頭へのポインタを取得する方法

ファイル全体を書き込みのような機能に渡したいのですが、どうすればいいですか?

+0

あなたは非常に明確ではありません - なぜfopen()またはopen()を使用できませんか? –

+0

ファイルストリームを渡して、seekp(ios_base :: beg)を使って現在の位置をファイルの先頭に設定できます。 – ttvd

+0

"ポインタ"について詳しく説明できますか?メモリポインタ、ファイル位置、ファイルポインタ、ハンドル...?おそらく関連コードのスニペットが問題をよりよく理解するのに便利だろう。 – xtofl

答えて

4

mmap()完全なファイルを作成してから、このポインタを書き込みに渡すことができます。あなたはopen()を使用して開く必要がありますが、fopen()ではありません。

+1

を開き、ファイルを開いた後にfstat(2)システムコールからファイルの長さを取得します。 – camh

4

sendfile()は、この目的のために特にPOSIXプラットフォームでネットワークを介して送信する際に使用され、カーネルはその複雑さを処理します。

+0

Sendfileは(a)移植性がありません。 (b)一部の宛先(例えばソケットのみ)にのみ対応 – derobert

+0

これはユーザスペースをバイパスします!データを使って実際には何もできないという意味で、カーネルにコピーを命じるだけです!それがすべて行われるべきかどうかという疑問は不明である。そうであれば、これは最速の方法でなければなりません。 – AndreasT

+0

"ポータブルではない"と私は幾分かんざりしていて、私は検索しました。あなたは、絶対に正しい!この関数はLinuxの世界でのみ使うことができ、他のUnixoidやウィンドウはこのコマンドを知らないか、あるいは別の方法で実装します。それでも、Linuxのみを対象としている場合は、可能な限り最良の方法です。 – AndreasT

関連する問題