ioctl.cr
ioctl.cr
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
-
Add the dependency to your
shard.yml
:dependencies: ioctl: github: postmodern/ioctl.cr
-
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
- 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
Contributors
- Postmodern - creator and maintainer
Repository
ioctl.cr
Owner
Statistic
- 1
- 0
- 0
- 1
- 1
- 20 days ago
- August 18, 2025
License
MIT License
Links
Synced at
Sun, 07 Sep 2025 18:41:01 GMT
Languages