Skip to content

Instantly share code, notes, and snippets.

@kavan-mevada
Last active November 14, 2019 11:32
Show Gist options
  • Save kavan-mevada/0a77b775e94508a05bac6b743951e0ce to your computer and use it in GitHub Desktop.
Save kavan-mevada/0a77b775e94508a05bac6b743951e0ce to your computer and use it in GitHub Desktop.
val fd = open(file_path, O_RDONLY)
val buffer_size = 2
val buffer = nativeHeap.allocArray<ByteVar>(buffer_size)
var bytesRead: ssize_t = 0
while (bytesRead < 19) {
val ret = read(fd, buffer + bytesRead, (buffer_size).convert())
println(buffer.toKString())
if (ret == 0L) break; /* EOF */
if (ret == -1L) { /* Handle error */ }
bytesRead += ret;
}
open class InputStream(path: String) {
private var fd: Int = -1
private var bytesRead = 0L
private var contentSize = 0L
init {
fd = open(path, O_RDONLY)
contentSize = nativeHeap.alloc<stat>().apply { stat(path, this.ptr) }.st_size -1
}
fun read(buffer: CArrayPointer<ByteVar>, buffsize: Long): CArrayPointer<ByteVar> {
val ret = read(fd, buffer, buffsize.convert())
bytesRead += ret
return buffer
//if (ret == 0L) break; /* EOF */
//if (ret == -1L) { break; /* Handle error */ }
}
fun available() = bytesRead < contentSize
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment