ファイルの最後の行だけを読み取りたいと思ってます。
ファイルサイズが大きくなると単純にreadlineの繰り返しじゃ重そうなので、

1.ファイルのEOF一歩手前までシーク
2.一文字読み取り
3.\r or \nならreadline
4.そうじゃないなら一文字分手前にシーク(2から繰り返し)

って処理にしようと思いました。

File.open('./result.txt'){|f|
f.seek(-2, IO::SEEK_END)
until (c = f.getc).to_s =~ /\r|\n/
puts f.pos
f.seek(-2, IO::SEEK_CUR)
end
}

posメソッドでシーク位置を確認しているのですが、
f.seek(-2, IO::SEEK_END)
だとシーク位置が変わらず、
f.seek(-3, IO::SEEK_END)
だとシーク位置が2ずつ下がっていくと言う摩訶不思議な現象が起こっています。

原因が分かる方いらっしゃいましたら教えてください。
あと、「せっかくだから俺ならこうするぜ」みたいなのもあったらぜひぜひおねがいします。