ioctl

crystal bindings for libc's ioctl(2)
1.0.0 Latest release released

ioctl.cr

libc's ioctl for Crystal.

Features

  • Maps in the libc ioctl function.

  • Provides C equivalent methods for defining and working with ioctl numbers:

    | C | Crystal | |-------------|---------------------------------| | _IOC | IOCTL::_IOC(dir,type,nr,size) | | _IO | IOCTL::_IOC(type,nr) | | _IOR | IOCTL::_IOR(type,nr,size) | | _IOW | IOCTL::_IOW(type,nr,size) | | _IOWR | IOCTL::_IOWR(type,nr,size) | | _IOC_DIR | IOCTL::_IOC_DIR(dir) | | _IOC_TYPE | IOCTL::_IOC_TYPE(type) | | _IOC_NR | IOCTL::_IOC_NR(nr) | | _IOC_SIZE | IOCTL::_IOC_SIZE(size) |

Installation

  1. Add the dependency to your shard.yml:

    dependencies:
      ioctl:
        github: postmodern/ioctl.cr
    
  2. Run shards install

Usage

require "ioctl"

output = MyStruct.new

begin
  IOCTL.ioctl(fd, IOCTL::..., pointerof(output))
request error : IOCTL::Error
  # ...
end

Returning -1 instead of raising an exception:

if LibC.ioctl(fd, IOCTL::..., pointerof(output)) == -1
  # ...
end

Examples

Get the terminal window size:

winsize = LibC::Winsize.new

begin
  IOCTL.ioctl(STDOUT.fd, IOCTL::TIOCGWINSZ, pointerof(winsize))
rescue error : IOCTL::Error
  STDERR.puts error.message
  exit -1
end

puts "Rows: #{winsize.ws_row}"
puts "Cols: #{winsize.ws_col}"

TODO

  • macOS / BSD support

Contributing

  1. Fork it (https://github.com/postmodern/ioctl/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

ioctl:
  github: crystal-posix/ioctl.cr
  version: ~> 1.0.0
License MIT
Crystal >= 0.33.0

Authors

Dependencies 0

Development Dependencies 0

Dependents 1

Last synced .
search fire star recently