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:
parent
4ed8bc99bd
commit
0e1a2a1776
2 changed files with 61 additions and 8 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -1,4 +1,6 @@
|
|||
.vscode/
|
||||
*.cpu
|
||||
*.mem
|
||||
*.test
|
||||
*.test
|
||||
|
||||
.idea
|
65
README.md
65
README.md
|
@ -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 |
|
||||
|
|
Loading…
Add table
Reference in a new issue