【Ruby3.x】IO::sysseek()メソッドの使い方
sysseekメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
sysseekメソッドは、IOクラスに属し、ファイルの読み書き位置(ファイルポインタ)を移動するメソッドです。このメソッドは、RubyのIOオブジェクトが扱うファイルの内部ポインタを、オペレーティングシステムが提供するファイル操作のシステムコールを直接利用して操作します。
一般的なIO#seekメソッドとは異なり、sysseekメソッドはRubyの内部バッファリングを介さずに動作します。そのため、ファイルの内容をRubyの内部バッファに読み込まずに、ファイルの特定の位置へ直接ジャンプすることが可能です。この特性により、バッファリングの影響を受けずにファイルの正確な位置にポインタを設定したい場合や、IO#sysreadやIO#syswriteといった、システムコールを直接利用する他のメソッドと組み合わせて低レベルなファイルI/Oを行う場合に特に利用されます。
引数としては、第1引数に移動させたいバイト数を数値で指定し、第2引数に移動の基準となる位置を指定します。基準位置には、ファイルの先頭からの相対位置を示すIO::SEEK_SET、現在のファイルポインタ位置からの相対位置を示すIO::SEEK_CUR、ファイルの末尾からの相対位置を示すIO::SEEK_ENDのいずれかの定数を指定します。
このメソッドは、ファイルポインタが移動した後の、ファイルの先頭からの絶対バイト位置を整数で返します。sysseekはバッファリングを考慮せずに動作するため、通常のIO操作と混在させると、データの一貫性に予期せぬ影響を与える可能性がある点に注意が必要です。システムレベルでの精密なファイルポインタ制御が必要な際に活用される、高度なメソッドの一つです。
構文(syntax)
1file = File.open("your_file.txt", "r") 2file.sysseek(10, IO::SEEK_SET) 3file.close
引数(parameters)
offset, whence = IO::SEEK_SET
- offset: 整数。移動させたいバイト数を指定します。
- whence = IO::SEEK_SET: 整数。offset の基準となる位置を指定します。IO::SEEK_SET (0) はファイルの先頭、IO::SEEK_CUR (1) は現在の位置、IO::SEEK_END (2) はファイルの末尾を基準とします。デフォルトは IO::SEEK_SET です。
戻り値(return)
Integer
sysseek メソッドは、ファイルポインタを移動させた後の新しいファイルポインタの位置を整数で返します。