2020-11-16 17:32:50 +01:00
|
|
|
module os
|
|
|
|
|
|
|
|
// file descriptor based operations:
|
|
|
|
pub fn fd_close(fd int) int {
|
|
|
|
return C.close(fd)
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn fd_write(fd int, s string) {
|
|
|
|
mut sp := s.str
|
|
|
|
mut remaining := s.len
|
|
|
|
for remaining > 0 {
|
|
|
|
written := C.write(fd, sp, remaining)
|
|
|
|
if written < 0 {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
remaining = remaining - written
|
2020-12-23 19:13:42 +01:00
|
|
|
sp = unsafe { sp + written }
|
2020-11-16 17:32:50 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn fd_slurp(fd int) []string {
|
|
|
|
mut res := []string{}
|
|
|
|
for {
|
|
|
|
s, b := fd_read(fd, 4096)
|
|
|
|
if b <= 0 {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
res << s
|
|
|
|
}
|
|
|
|
return res
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn fd_read(fd int, maxbytes int) (string, int) {
|
|
|
|
mut buf := malloc(maxbytes)
|
|
|
|
nbytes := C.read(fd, buf, maxbytes)
|
|
|
|
if nbytes < 0 {
|
|
|
|
free(buf)
|
|
|
|
return '', nbytes
|
|
|
|
}
|
|
|
|
unsafe {
|
|
|
|
buf[nbytes] = 0
|
|
|
|
}
|
|
|
|
return tos(buf, nbytes), nbytes
|
|
|
|
}
|