ioctl

crystal bindings for libc's ioctl(2)
0.1.2 released

ioctl.cr

libc's ioctl for Crystal.

Features

Functions

  • Maps in the libc ioctl function.

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

    | C | Crystal | |-------------|-------------------------------| | _IOC | ioctl_ioc(dir,type,nr,size) | | _IO | ioctl_io(type,nr) | | _IOR | ioctl_ior(type,nr,size) | | _IOW | ioctl_iow(type,nr,size) | | _IOWR | ioctl_iowr(type,nr,size) | | _IOR_BAD | ioctl_ior_bad(type,nr,size) | | _IOW_BAD | ioctl_iow_bad(type,nr,size) | | _IOWR_BAD | ioctl_iowr_bad(type,nr,size)| | _IOC_DIR | ioctl_dir(nr) | | _IOC_TYPE | ioctl_type(nr) | | _IOC_NR | ioctl_nr(nr) | | _IOC_SIZE | ioctl_size(nr) |

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: ~> 0.1.2
License MIT
Crystal >= 0.33.0

Authors

Dependencies 0

Development Dependencies 1

  • spectator ~> 0.9, >= 0.9.9
    {'gitlab' => 'arctic-fox/spectator', 'version' => '~> 0.9, >= 0.9.9'}

Dependents 1

Last synced .
search fire star recently