Documentation ¶
Index ¶
- Variables
- func CheckBytesToRead(fd uintptr) (int, error)
- func CopyDir(src string, dst string) (err error)
- func CopyFile(src, dst string) (err error)
- func CustomReadCloser(r io.Reader, fClose func() error) io.ReadCloser
- func CustomWriteCloser(w io.Writer, fClose func() error) io.WriteCloser
- func IsDeadlineExceeded(err error) bool
- func Pipe() (io.ReadCloser, io.WriteCloser)
- func ReadInputLine(r io.Reader) ([]byte, error)
- func TempFilename(dir, pattern string) (string, error)
- func WriteFile(file string, data []byte, perm os.FileMode, overwrite bool) (undo func() error, _ error)
- type DevNull
- type TimeoutReader
Constants ¶
This section is empty.
Variables ¶
var ErrDeadlineExceeded error
ErrDeadlineExceeded is the export of internal/poll.ErrDeadlineExceeded which is the same as os.ErrDeadlineExceeded in go1.15 and onwards
Functions ¶
func CheckBytesToRead ¶ added in v0.3.3
CheckBytesToRead calls ioctl(fd, FIONREAD) to check ready data size of fd
func CopyDir ¶
CopyDir recursively copies a directory tree, attempting to preserve permissions. Source directory must exist, destination directory must *not* exist. Symlinks are ignored and skipped.
func CopyFile ¶
CopyFile copies the contents of the file named src to the file named by dst. The file will be created if it does not already exist. If the destination file exists, all it's contents will be replaced by the contents of the source file. The file mode will be copied from the source and the copied data is synced/flushed to stable storage.
func CustomReadCloser ¶ added in v0.8.0
func CustomReadCloser(r io.Reader, fClose func() error) io.ReadCloser
func CustomWriteCloser ¶ added in v0.8.0
func CustomWriteCloser(w io.Writer, fClose func() error) io.WriteCloser
func IsDeadlineExceeded ¶ added in v0.5.0
func Pipe ¶
func Pipe() (io.ReadCloser, io.WriteCloser)
Pipe returns io.Pipe if os.Pipe returned error
func ReadInputLine ¶ added in v0.8.1
ReadInputLine read a line from user input stream (usually the stdin) copied from golang.org/x/term/terminal.go#readPasswordLine
func TempFilename ¶ added in v0.2.0
Types ¶
type DevNull ¶ added in v0.9.0
type DevNull struct {
// contains filtered or unexported fields
}
func NewDevNull ¶ added in v0.9.0
func NewDevNull() DevNull
type TimeoutReader ¶
type TimeoutReader struct {
// contains filtered or unexported fields
}
TimeoutReader is a reader with read timeout support
It is designed for those want to read some data from a stream, and the size of the data is unknown, but still want to pipe data to some destination at certain interval
example use case: data streaming for shell interaction over MQTT
when user input/output is slow, shall we send one character a time for real-time interaction? what if the user executed `cat some-large-file`? what if user was sending a large chunk of data over stdin? for raw tcp connection that's fine if you have configured tcp buffering correctly, but for packet oriented connections (in this case MQTT), send one byte per packet will significantly increase protocol overhead. with TimeoutReader we can read data generated in some interval (say 20ms), no real-time experience lost while still keep protocol overhead at a reasonable level
func NewTimeoutReader ¶
func NewTimeoutReader(r io.Reader) *TimeoutReader
NewTimeoutReader creates a new idle timeout reader from a blocking reader
func (*TimeoutReader) Error ¶
func (t *TimeoutReader) Error() error
Error returns the error happened during reading in background
func (*TimeoutReader) FallbackReading ¶ added in v0.3.3
func (t *TimeoutReader) FallbackReading(stopSig <-chan struct{})
func (*TimeoutReader) Read ¶ added in v0.3.3
func (t *TimeoutReader) Read(maxWait time.Duration, p []byte) (data []byte, shouldCopy bool, err error)
Read performs a read operation with timeout option, will block until maxWait exceeded or p is full
if the function returned because of timeout, the returned error is ErrDeadlineExceeded
func (*TimeoutReader) WaitForData ¶ added in v0.3.3
func (t *TimeoutReader) WaitForData(cancel <-chan struct{}) bool
WaitForData is a helper function used to check if there is data available in reader so we can reduce actual call of Read when the timeout is a short duration
when return value is true, you MUST call Read to read data and you can read at least one byte from the underlying reader
otherwise, false means the provided cancel has signaled or error happened, you can no longer read from the underlying reader if Error() returned non-nil value.