mirror of
https://github.com/vlang/v.git
synced 2025-09-08 14:51:53 -04:00
28 lines
779 B
V
28 lines
779 B
V
import os
|
|
import time
|
|
|
|
if os.args.len == 1 {
|
|
eprintln('A small `tail -f file` like program, written in V.')
|
|
eprintln('Usage: `v run examples/vtail.v your_long_file.log`')
|
|
exit(0)
|
|
}
|
|
|
|
tfile := os.args[1] or { panic('pass 1 file path as argument') }
|
|
mut f := os.open_file(tfile, 'r') or { panic('file ${tfile} does not exist') }
|
|
f.seek(0, .end)!
|
|
mut read_pos := f.tell()!
|
|
mut buf := []u8{len: 10 * 1024}
|
|
for {
|
|
bytes := f.read_bytes_with_newline(mut buf)!
|
|
if bytes == 0 && f.eof() {
|
|
// The end of the file has been reached, so wait a bit, and retry from the same position:
|
|
f.close()
|
|
time.sleep(500 * time.millisecond)
|
|
f = os.open_file(tfile, 'r')!
|
|
f.seek(read_pos, .start)!
|
|
continue
|
|
}
|
|
read_pos += bytes
|
|
print(unsafe { (&u8(buf.data)).vstring_with_len(bytes) })
|
|
}
|