# ioctl-macros-rs Rust macros that can be used to generate ioctl numbers on unix systems. This crate uses your target system's headers to automatically find the `_IO`, `_IOR`, `_IOW`, and `_IOWR` C definitions and create Rust bindings for them. The result is an extremely small crate that works on any system supporting the above C macros. It has been tested with Linux, OpenBSD, FreeBSD, and NetBSD. Feel free to report any issues. # Usage The crate provides four macros; `io!`, `ior!`, `iow!`, and `iowr!`. They are used the same way you would use the C macros above. The first argument is the identifying letter. For Linux, you can find a list [here](http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/plain/Documentation/ioctl/ioctl-number.txt) on the official kernel.org website. The second argument is the sequence number. Unfortunately they are not very well documented, so you may need to dig into some of your system's headers to find them. The third argument (in the case of the read/write macros) is the type of data that you'll be passing along to your `ioctl` function. ```rust // This definition is found in as: // #define JSIOCGVERSION _IOR('j', 0x01, __u32) let JSIOCGVERSION = ior!('j', 0x01, u32) // This definition is found in as: // #define DRM_IOCTL_SET_MASTER _IO('d', 0x1e) let DRM_IOCTL_SET_MASTER = io!('d', 0x1e) ```