# :nodoc: class File::PReader < IO include IO::Buffered getter? closed = false @offset : Int64 @bytesize : Int64 @pos : Int64 def initialize(@file : File, offset : Int, bytesize : Int) @offset = offset.to_i64 @bytesize = bytesize.to_i64 @pos = 0 end def unbuffered_read(slice : Bytes) : Int32 check_open count = slice.size count = Math.min(count, @bytesize - @pos) bytes_read = @file.@fd_lock.reference do Crystal::System::FileDescriptor.pread(@file, slice[0, count], @offset + @pos) end @pos += bytes_read bytes_read.to_i32 end def unbuffered_write(slice : Bytes) : NoReturn raise IO::Error.new("Can't write to read-only IO") end def unbuffered_flush : NoReturn raise IO::Error.new("Can't flush read-only IO") end def unbuffered_rewind : Nil @pos = 0 end def unbuffered_close : Nil @closed = true end end