ioctl
Version, currently 1.0.04 versions
- 1.0.0latestFeb 12, 2023
- 0.1.2not indexedFeb 16, 2023
- 0.1.1not indexedFeb 16, 2023
- 0.1.0not indexedFeb 16, 2023
github.com/crystal-posix/ioctl.cr
crystal bindings for libc's ioctl(2)
8 stars
0 dependents
License: MIT
Installation
# Add this to your shard.yml
dependencies:
ioctl:
github: crystal-posix/ioctl.cr
version: ~> 1.0.0Then run:
shards installshard.yml
- Crystal
>= 0.33.0- License
- MIT
- Author
- Postmodern <postmodern.mod3@gmail.com>
Dependencies
This version declares no dependencies.
README
# ioctl.cr
* [Source](https://github.com/postmodern/ioctl.cr)
* [Issues](https://github.com/postmodern/ioctl.cr/issues)
* [Docs](https://postmodern.github.io/docs/ioctrl.cr/index.html)
libc's [ioctl] for [Crystal][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`:
```yaml
dependencies:
ioctl:
github: postmodern/ioctl.cr
```
2. Run `shards install`
## Usage
```crystal
require "ioctl"
output = MyStruct.new
begin
IOCTL.ioctl(fd, IOCTL::..., pointerof(output))
request error : IOCTL::Error
# ...
end
```
Returning `-1` instead of raising an exception:
```crystal
if LibC.ioctl(fd, IOCTL::..., pointerof(output)) == -1
# ...
end
```
### Examples
Get the terminal window size:
```crystal
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
- [Postmodern](https://github.com/postmodern) - creator and maintainer
[ioctl]: http://man7.org/linux/man-pages/man2/ioctl.2.html
[crystal]: https://crystal-lang.org/
Documentation
Built from the current release. The first visit to a release nobody has asked for starts its build.
Links
This release
- Version
1.0.0- Tagged
- Feb 12, 2023
- Commit
a1346032c6dc- Crystal
>= 0.33.0- Indexed
- yes
Dependents
No indexed shard depends on this one yet.
Repository
github.com/crystal-posix/ioctl.cr
Metadata
- Created
- Aug 12, 2026
- Updated
- Aug 13, 2026
- Synced
- Aug 13, 2026
- Versions
- 4