Project

ioposrw

0.0
No commit activity in last 3 years
No release in over 3 years
Append IO#readat/writeat methods. These provide similar functionality to the POSIX pread/pwrite. This library works on windows and unix. But tested on windows and FreeBSD only.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

 Project Readme

ioposrw

位置指定IO読み書きメソッド追加拡張ライブラリ


これは何?

ioposrw は IO インスタンスに位置指定読み書き機能を追加する拡張ライブラリです。

この機能は IO#readat / IO#writeat によって提供されます。

これらのメソッドは、元々ある IO#read / IO#write によって更新されるファイル位置ポインタに影響されません。

マルチスレッド動作中に同じファイルインスタンスの別の領域を読み書きしても、想定通りの動作が期待できます。

追加の機能として、StringIO#readat / StringIO#writeat も実装してあります (実際に利用する場合は、require "ioposrw/stringio" を行って下さい)。

どう使うのか?

ライブラリの読み込み:

require "ioposrw"

ファイルの読み込み:

File.open("sample.txt") do |file|
  buf = ""
  file.readat(200, 100, buf) # sample.txt の先頭 200 バイト位置から
                             # 100 バイトを buf に読み込む
end

ファイルの書き込み:

File.open("sample.txt", "w") do |file|
  buf = "ごにょごにょ"
  file.writeat(200, buf) # sample.txt の先頭 200 バイト位置に buf を書き込む
end

注意事項について

  • Windows 上では、IO#readat / IO#writeat を呼び出すとファイルポインタ (IO#pos) が指定位置の次に変更されます (このことは丁度 IO#pos=IO#read を呼び出した後の状態と考えてください)。

    これは Windows 自身に伴う仕様となります。

内部の実装方法

POSIX システムコールの pread(2) / pwrite(2) を中心に実装しました。

Windows 環境では OVERRAPPED 構造体を与えた ReadFile / WriteFile をそれぞれ用いて pread / pwrite 関数を構築し、あとは同じです。