Ruby silverの模擬問題を抜粋して解説をしていきます。
seekメソッドの引数whenceに指定する値の説明として正しいものを選びなさいという問題です。
io.seek(offset, whence)
1.IO::SEEK_CURで、現在のファイルポインタ位置からoffsetの数値分だけ移動する
2.IO::SEEK_DATAで、offsetで指定した数値と一致するデータがある位置へ移動する
3.IO::SEEK_SETで、ファイルポインタがファイルの先頭に戻る
4.IO::SEEK_ENDで、ファイルポインタがファイルの末尾に移動する
まず、ioとはなに?というところから解説します。
ioとはioオブジェクトという入出力操作を扱うための機能を提供するオブジェクトになっております。
ちなみに、ioとはInput/Output(入力/出力)の略称になっています。
次に'.seek'メソッドはファイルやストレージ内の現在の位置を変更するために使用されるメソッドになっています。
'.seek'メソッドの公式リファレンス
次に、引数にあるoffsetとwhenceになります。
offsetは、ファイル内の位置を表すバイト単位のオフセットを示します。
具体的には、ファイルの先頭からのバイト数を表します。正の値はファイルの先頭からのオフセットを、負の値はファイルの末尾からのオフセットを表します。
offsetを使用することで、ファイルポインタを指定した位置に移動させることができます。
例えば、offsetが10の場合、ファイルポインタは現在位置から10バイト後ろに移動します。
次に、whenceになります。
whenceの値は以下のいずれかになります。
IO::SEEK_SET: ファイルの先頭から (デフォルト)
IO::SEEK_CUR: 現在のファイルポインタから
IO::SEEK_END: ファイルの末尾から
IO::SEEK_DATA: offset 以降の次にデータがある位置へ(lseek の man ページ参照。Linux 3.1 以降のみ)
IO::SEEK_HOLE: offset 以降の次にホールがある位置へ(同上)
例) io.seek(10, IO::SEEK_CUR)
今ままでの説明を例として書くとこのようなコードになります。
意味としては、現在のファイルポインタから10バイト先に移動しますという意味になっています。
今までの解説を踏まえて、今回の問題でwhenceの正しい説明をしているのは1番になります。