2013-11-05 15 views

答えて

3

はい、あなたはlseekを探しています。

http://linux.die.net/man/2/lseek

+1

「そこ」は、正確に何をしますか?私は、「穴」と「データ」という言葉を使うことでちょっと混乱しています。データはゼロ以外の値であり、ホールはゼロの値ですか? – zaloo

+1

'whence'はオフセットがどのようなものかを決定します。したがって、SEEK_SETで10バイトを要求すると、ファイルの先頭から10バイトになります。 'SEEK_CUR'で6バイトを要求すると、ファイルの先頭から16バイトになります。 – paddy

+0

ギャップと穴が気になることはありません。これは、ファイルの最後を追うような状況に対処しています。 – paddy

0

はい、あなたは使用することができlseek()lseek()機能が指示に従って引数offseトンにファイルディスクリプタfdに関連付けられたオープンされたファイルのオフセットを再配置し

off_t lseek(int fd, off_t offset, int whence); 

whenceは、次のとおりです。

SEEK_SET

オフセットはオフセットバイトに設定されます。

SEEK_CUR

オフセット現在の場所に設定プラスバイトオフセットされています。

SEEK_END

オフセットファイルのサイズに設定プラスバイトオフセットされます。

3

lseek()とします。

+4

私はそれが 'lseek'だと思って、あなたは' lfind'と言うでしょう。この答えは – paddy

5

はい。 the same librarylseek関数を使用します。

ファイルの開始位置または終了位置、または現在の位置からの相対的なオフセットを求めることができます。

そのライブラリページに圧倒されないでください。ここに簡単な使用例がいくつかあります。おそらくすべての人々が必要とするでしょう:

lseek(fd, 0, SEEK_SET); /* seek to start of file */ 
lseek(fd, 100, SEEK_SET); /* seek to offset 100 from the start */ 
lseek(fd, 0, SEEK_END); /* seek to end of file (i.e. immediately after the last byte) */ 
lseek(fd, -1, SEEK_END); /* seek to the last byte of the file */ 
lseek(fd, -10, SEEK_CUR); /* seek 10 bytes back from your current position in the file */ 
lseek(fd, 10, SEEK_CUR); /* seek 10 bytes ahead of your current position in the file */ 

幸運!

8

ファイルオフセット受け入れるpread/pwrite機能があります。

ssize_t pread(int fd, void *buf, size_t count, off_t offset); 
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset); 
+4

+1です。マルチスレッドプログラムの場合、 'pread()'と 'pwrite()'はファイルのオフセットに影響を与えないので、より優れています(複数のスレッドは同じファイル記述子からロックをせず、 'lseek () 'と' read() ')を呼び出します。 –

+1

また、システムコールは1つだけです! –