1
0
Fork 0
mirror of https://github.com/ii64/gouring.git synced 2025-04-26 05:42:48 +02:00

feat: read example

This commit is contained in:
espoal 2022-10-11 12:48:54 +02:00
parent 4ed8bc99bd
commit 0e1a2a1776
2 changed files with 61 additions and 8 deletions

4
.gitignore vendored
View file

@ -1,4 +1,6 @@
.vscode/
*.cpu
*.mem
*.test
*.test
.idea

View file

@ -7,31 +7,82 @@
```bash
go get github.com/ii64/gouring
```
## Example
# Examples
## Write
```go
// setup
h, err := gouring.New(256, 0)
if err != nil { /*...*/ }
defer h.Close()
if err != nil {
log.Fatal("Error creating ring: ", err)
}
defer h.Close()
sqe := h.GetSQE()
fd, err := unix.Open("/tmp/gouring_test", unix.O_RDWR, 0677)
if err != nil {
log.Fatal("Error opening file: ", err)
}
sqe := h.GetSqe()
b := []byte("io_uring!\n")
PrepWrite(sqe, 1, &b[0], len(b), 0)
gouring.PrepWrite(sqe, fd, &b[0], len(b), 0)
submitted, err := h.SubmitAndWait(1)
if err != nil { /*...*/ }
if err != nil {
log.Fatal("Error waiting ring: ", err)
}
println(submitted) // 1
var cqe *gouring.IoUringCqe
err = h.WaitCqe(&cqe)
if err != nil { /*...*/ } // check also EINTR
if err != nil {
log.Fatal("Error waiting cqe: ", err)
} // check also EINTR
_ = cqe.UserData
_ = cqe.Res
_ = cqe.Flags
```
## Read
```go
// setup
h, err := gouring.New(256, 0)
if err != nil {
log.Fatal("Error creating ring: ", err)
}
defer h.Close()
fd, err := unix.Open("/tmp/gouring_test", unix.O_RDWR, 0677)
if err != nil {
log.Fatal("Error opening file: ", err)
}
sqe := h.GetSqe()
b := make([]byte, 20)
gouring.PrepRead(sqe, fd, &b[0], len(b), 0)
submitted, err := h.SubmitAndWait(1)
if err != nil {
log.Fatal("Error waiting ring: ", err)
}
println(submitted) // 1
var cqe *gouring.IoUringCqe
err = h.WaitCqe(&cqe)
if err != nil {
log.Fatal("Error waiting cqe: ", err)
} // check also EINTR
_ = cqe.UserData
_ = cqe.Res
_ = cqe.Flags
log.Println("CQE: ", cqe)
log.Println("Buffer: ", b)
log.Println("Buffer: ", string(b))
```
## Graph
| SQPOLL | non-SQPOLL |