From 0e1a2a17766ba1d6dc35e7052705f6b7d17c81ca Mon Sep 17 00:00:00 2001
From: espoal <alberto.websci@gmail.com>
Date: Tue, 11 Oct 2022 12:48:54 +0200
Subject: [PATCH 1/2] feat: read example

---
 .gitignore |  4 +++-
 README.md  | 65 ++++++++++++++++++++++++++++++++++++++++++++++++------
 2 files changed, 61 insertions(+), 8 deletions(-)

diff --git a/.gitignore b/.gitignore
index 2315eb5..a177441 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,6 @@
 .vscode/
 *.cpu
 *.mem
-*.test
\ No newline at end of file
+*.test
+
+.idea
\ No newline at end of file
diff --git a/README.md b/README.md
index 8fe59ce..ac80826 100644
--- a/README.md
+++ b/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 |

From b6cd047a2870ccbd48f7ca36ba774dee43fec7a4 Mon Sep 17 00:00:00 2001
From: espoal <alberto.websci@gmail.com>
Date: Tue, 11 Oct 2022 22:51:18 +0200
Subject: [PATCH 2/2] feat: addes examples folder

---
 examples/read.go  | 43 +++++++++++++++++++++++++++++++++++++++++++
 examples/write.go | 37 +++++++++++++++++++++++++++++++++++++
 go.mod            |  7 +++++--
 go.sum            |  2 ++
 queue_test.go     |  2 +-
 5 files changed, 88 insertions(+), 3 deletions(-)
 create mode 100644 examples/read.go
 create mode 100644 examples/write.go

diff --git a/examples/read.go b/examples/read.go
new file mode 100644
index 0000000..4af58b8
--- /dev/null
+++ b/examples/read.go
@@ -0,0 +1,43 @@
+package main
+
+import (
+	"github.com/ii64/gouring"
+	"golang.org/x/sys/unix"
+	"log"
+)
+
+func main() {
+
+	h, err := gouring.New(256, 0)
+	if err != nil {
+		log.Fatal(err)
+	}
+	defer h.Close()
+
+	fd, err := unix.Open("/tmp/test", unix.O_RDWR, 0677)
+
+	sqe := h.GetSqe()
+	b := make([]byte, 20)
+	gouring.PrepRead(sqe, fd, &b[0], len(b), 0)
+	log.Println("Buffer: ", b)
+
+	submitted, err := h.SubmitAndWait(1)
+	if err != nil {
+		log.Fatal(err)
+	}
+	println(submitted) // 1
+
+	var cqe *gouring.IoUringCqe
+	err = h.WaitCqe(&cqe)
+	if err != nil {
+		log.Fatal(err)
+	} // check also EINTR
+
+	log.Println("CQE: ", cqe)
+	log.Println("Buffer: ", b)
+	log.Println("Buffer: ", string(b))
+
+	_ = cqe.UserData
+	_ = cqe.Res
+	_ = cqe.Flags
+}
diff --git a/examples/write.go b/examples/write.go
new file mode 100644
index 0000000..c589127
--- /dev/null
+++ b/examples/write.go
@@ -0,0 +1,37 @@
+package main
+
+import (
+	"github.com/ii64/gouring"
+	"golang.org/x/sys/unix"
+	"log"
+)
+
+func main() {
+
+	h, err := gouring.New(256, 0)
+	if err != nil {
+		log.Fatal(err)
+	}
+	defer h.Close()
+
+	fd, err := unix.Open("/tmp/test", unix.O_RDWR, 0677)
+
+	sqe := h.GetSqe()
+	b := []byte("hello from io_uring!\n")
+	gouring.PrepWrite(sqe, fd, &b[0], len(b), 0)
+
+	submitted, err := h.SubmitAndWait(1)
+	if err != nil { /*...*/
+	}
+	println(submitted) // 1
+
+	var cqe *gouring.IoUringCqe
+	err = h.WaitCqe(&cqe)
+	if err != nil {
+		log.Fatal(err)
+	} // check also EINTR
+
+	_ = cqe.UserData
+	_ = cqe.Res
+	_ = cqe.Flags
+}
diff --git a/go.mod b/go.mod
index 546250a..227886f 100644
--- a/go.mod
+++ b/go.mod
@@ -2,10 +2,13 @@ module github.com/ii64/gouring
 
 go 1.18
 
-require github.com/stretchr/testify v1.7.0
+require (
+	github.com/davecgh/go-spew v1.1.0
+	github.com/stretchr/testify v1.7.0
+	golang.org/x/sys v0.0.0-20221010170243-090e33056c14
+)
 
 require (
-	github.com/davecgh/go-spew v1.1.0 // indirect
 	github.com/pmezard/go-difflib v1.0.0 // indirect
 	gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect
 )
diff --git a/go.sum b/go.sum
index acb88a4..9daff57 100644
--- a/go.sum
+++ b/go.sum
@@ -5,6 +5,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+golang.org/x/sys v0.0.0-20221010170243-090e33056c14 h1:k5II8e6QD8mITdi+okbbmR/cIyEbeXLBhy5Ha4nevyc=
+golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
diff --git a/queue_test.go b/queue_test.go
index bb9bb1c..dbe5053 100644
--- a/queue_test.go
+++ b/queue_test.go
@@ -151,7 +151,7 @@ func TestRingQueueSubmitSingleConsumer(t *testing.T) {
 			}
 
 			submit := func(t *testing.T, opt *IoUringParams, h *IoUring, expectedSubmitCount int) {
-				submitted, err := h.io_uringn_submit()
+				submitted, err := h.io_uring_submit()
 				assert.NoError(t, err)
 				if opt.Flags&IORING_SETUP_SQPOLL == 0 {
 					assert.Equal(t, expectedSubmitCount, submitted)