Я хочу позвонить ioctl
из Rust. Я знаю, что я должен использовать the nix crate, но как именно? Из документации это непонятно.Как использовать ioctl от nix?
У меня это C:
int tun_open(char *devname)
{
struct ifreq ifr;
int fd, err;
if ((fd = open("/dev/net/tun", O_RDWR)) == -1) {
perror("open /dev/net/tun");exit(1);
}
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags = IFF_TUN;
strncpy(ifr.ifr_name, devname, IFNAMSIZ);
/* ioctl will use if_name as the name of TUN
* interface to open: "tun0", etc. */
if ((err = ioctl(fd, TUNSETIFF, (void *) &ifr)) == -1) {
perror("ioctl TUNSETIFF");close(fd);exit(1);
}
//..........
Как бы я сделать то же самое с помощью Никс клеть? В ящике nix нет констант TUN*
, и неясно, как использовать макрос ioctl
.
Это похоже на проблему [XY] (http://meta.stackexchange.com/questions/66377/what-is -the-xy-problem) мне: вместо того, чтобы спрашивать о конкретном случае использования ioctl, вы спрашиваете, как использовать ящик 'nix'. Тем не менее, стоит упомянуть, что аналогичный пример использования ioctl, по-видимому, описан на странице http://hermanradtke.com/2016/03/17/unions-rust-ffi.html. – ArtemGr
@ArtemGr OP предоставил короткий и простой фрагмент кода C и спросил, как сделать эквивалент в Rust. Как именно это проблема XY? – user4815162342