Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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))
rescue 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

About

Crystal bindings for libc's ioctl(2)

Topics

Resources

Stars

Watchers

Forks

Releases

Sponsor this project

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.