Skip to content

Instantly share code, notes, and snippets.

@ericlagergren
Created March 28, 2015 07:30
Show Gist options
  • Save ericlagergren/ebed1dcf846db354bdb5 to your computer and use it in GitHub Desktop.
Save ericlagergren/ebed1dcf846db354bdb5 to your computer and use it in GitHub Desktop.
simple ioctl FIONREAD example.
package main
import (
"fmt"
"os"
"syscall"
"unsafe"
)
var (
errEAGAIN error = syscall.EAGAIN
errEINVAL error = syscall.EINVAL
errENOENT error = syscall.ENOENT
)
func errnoErr(e syscall.Errno) error {
switch e {
case 0:
return nil
case syscall.EAGAIN:
return errEAGAIN
case syscall.EINVAL:
return errEINVAL
case syscall.ENOENT:
return errENOENT
}
return e
}
func ioctl(fd int, request int, argp *int) (err error) {
_, _, e1 := syscall.Syscall(syscall.SYS_IOCTL,
uintptr(fd),
uintptr(request),
uintptr(unsafe.Pointer(argp)))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
func main() {
file, err := os.Open("idk.c")
if err != nil {
panic(err)
}
defer file.Close()
n := 0
err = ioctl(int(file.Fd()), 0x541B, &n)
fmt.Println(n)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment