Rolled back some stuff here like the package stuff
This will add support to view live data
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
package sharedMem
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
)
|
||||
|
||||
// Memory is shared memory struct
|
||||
type Memory struct {
|
||||
m *shmi
|
||||
pos int64
|
||||
}
|
||||
|
||||
// Create is create shared memory
|
||||
func Create(name string, size uint32) (*Memory, error) {
|
||||
m, err := create(name, size)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Memory{m, 0}, nil
|
||||
}
|
||||
|
||||
// Open is open exist shared memory
|
||||
func Open(name string, size uint32) (*Memory, error) {
|
||||
m, err := open(name, size)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Memory{m, 0}, nil
|
||||
}
|
||||
|
||||
// Close is close & discard shared memory
|
||||
func (o *Memory) Close() (err error) {
|
||||
if o.m != nil {
|
||||
err = o.m.close()
|
||||
if err == nil {
|
||||
o.m = nil
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// Read is read shared memory (current position)
|
||||
func (o *Memory) Read(p []byte) (n int, err error) {
|
||||
n, err = o.ReadAt(p, o.pos)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
o.pos += int64(n)
|
||||
return n, nil
|
||||
}
|
||||
|
||||
// ReadAt is read shared memory (offset)
|
||||
func (o *Memory) ReadAt(p []byte, off int64) (n int, err error) {
|
||||
return o.m.readAt(p, off)
|
||||
}
|
||||
|
||||
// Seek is move read/write position at shared memory
|
||||
func (o *Memory) Seek(offset int64, whence int) (int64, error) {
|
||||
switch whence {
|
||||
case io.SeekStart:
|
||||
offset += int64(0)
|
||||
case io.SeekCurrent:
|
||||
offset += o.pos
|
||||
case io.SeekEnd:
|
||||
offset += int64(o.m.size)
|
||||
}
|
||||
if offset < 0 || offset >= int64(o.m.size) {
|
||||
return 0, fmt.Errorf("invalid offset")
|
||||
}
|
||||
o.pos = offset
|
||||
return offset, nil
|
||||
}
|
||||
|
||||
// Write is write shared memory (current position)
|
||||
func (o *Memory) Write(p []byte) (n int, err error) {
|
||||
n, err = o.WriteAt(p, o.pos)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
o.pos += int64(n)
|
||||
return n, nil
|
||||
}
|
||||
|
||||
// WriteAt is write shared memory (offset)
|
||||
func (o *Memory) WriteAt(p []byte, off int64) (n int, err error) {
|
||||
return o.m.writeAt(p, off)
|
||||
}
|
||||
Reference in New Issue
Block a user