You just need **8192 B** (64 bit CPU) for you large files. Whenever you
actually does not need all 16GB data. Try:
import os, posix
const
BufSize = 8192
filename = "/home/king/test.txt"
var
pos = 0
size = 0
f: File
buf: array[BufSize, char]
proc flushBuf() =
if size > 0:
echo "buf: ", buf, " len: ", len(buf)
pos = 0
size = 0
if not open(f, filename, fmRead):
raise newException(IOError, "could not open")
while true:
size = f.readBuffer(buf[pos].addr, BufSize - pos)
if size < 0:
let lastError = osLastError()
if lastError.int32 notin {EINTR}:
continue
if f.endOfFile():
flushBuf()
break
if size + pos == BufSize:
flushBuf()
else:
inc(pos, size)