read(2) および write(2) 関数を使用して、ファイル記述子を指定してファイルの読み取りと書き込みを行ってきました。
読み取り/書き込み用にファイルにオフセットを入れることができるこのような関数はありますか?
はい、あなたはlseek
を探しています。
ファイルオフセットを受け入れる 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);
はい。 同じライブラリ で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 */
幸運を!
lseek()
そしてあなたがたは受け取るものとします。
はい、使用できます lseek()
:
_off_t lseek(int fd, off_t offset, int whence);
_
lseek()
関数は、次のように、ディレクティブfd
に従って、ファイル記述子offse
に関連付けられている開いているファイルのオフセットを引数whence
tに再配置します。_
SEEK_SET
_オフセットはオフセットバイトに設定されます。
_
SEEK_CUR
_オフセットは、現在の場所にオフセットバイトを加えた値に設定されます。
_
SEEK_END
_オフセットは、ファイルのサイズにオフセットバイトを加えたサイズに設定されます。