web-dev-qa-db-ja.com

オフセットでのファイル記述子からの読み取り/書き込み

read(2) および write(2) 関数を使用して、ファイル記述子を指定してファイルの読み取りと書き込みを行ってきました。

読み取り/書き込み用にファイルにオフセットを入れることができるこのような関数はありますか?

11
zaloo

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

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

6
paddy

ファイルオフセットを受け入れる 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);
16
Sergey Podobry

はい。 同じライブラリlseek関数を使用します。

次に、ファイルの開始または終了、または現在の場所を基準にした任意のオフセットをシークできます。

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

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 */

幸運を!

9
Darren Stone

lseek() そしてあなたがたは受け取るものとします。

5
Potatoswatter

はい、使用できます lseek()

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

lseek()関数は、次のように、ディレクティブfdに従って、ファイル記述子offseに関連付けられている開いているファイルのオフセットを引数whencetに再配置します。

_SEEK_SET_

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

_SEEK_CUR_

オフセットは、現在の場所にオフセットバイトを加えた値に設定されます。

_SEEK_END_

オフセットは、ファイルのサイズにオフセットバイトを加えたサイズに設定されます。

1
Yu Hao