-
Maps in the libc
ioctlfunction. -
Provides C equivalent macros for defining and working with ioctl numbers:
C Crystal _IOCioctl_ioc(dir,type,nr,size)_IOioctl_io(type,nr)_IORioctl_ior(type,nr,size)_IOWioctl_iow(type,nr,size)_IOWRioctl_iowr(type,nr,size)_IOR_BADioctl_ior_bad(type,nr,size)_IOW_BADioctl_iow_bad(type,nr,size)_IOWR_BADioctl_iowr_bad(type,nr,size)_IOC_DIRioctl_dir(nr)_IOC_TYPEioctl_type(nr)_IOC_NRioctl_nr(nr)_IOC_SIZEioctl_size(nr)
-
Add the dependency to your
shard.yml:dependencies: ioctl: github: postmodern/ioctl.cr
-
Run
shards install
require "ioctl"
output = MyStruct.new
begin
IOCTL.ioctl(fd, IOCTL::..., pointerof(output))
rescue error : IOCTL::Error
# ...
endReturning -1 instead of raising an exception:
if LibC.ioctl(fd, IOCTL::..., pointerof(output)) == -1
# ...
endGet 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}"- macOS / BSD support
- Fork it (https://github.com/postmodern/ioctl/fork)
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request
- Postmodern - creator and maintainer