Chcę zadzwonić pod numer ioctl
z Rust. Wiem, że powinienem użyć the nix crate, ale jak dokładnie? Z dokumentacji nie wynika jasno.Jak korzystać z ioctl nix?
mam to 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);
}
//..........
Jak miałbym to zrobić to samo za pomocą skrzyni nix? W skrzynce nix nie ma stałych TUN*
i nie jest jasne, jak używać makro ioctl
.
To wydaje się być problemem [XY] (http://meta.stackexchange.com/questions/66377/what-is -the-xy-problem) do mnie: zamiast pytać o konkretny przypadek użycia ioctl, pytasz, jak użyć skrzyni 'nix'. Warto jednak wspomnieć, że podobny przypadek użycia ioctl wydaje się być opisany na http://hermanradtke.com/2016/03/17/unions-rust-ffi.html. – ArtemGr
@ArtemGr OP zawiera krótki i prosty fragment kodu C i zapytał, jak zrobić ekwiwalent w Rust. Jak dokładnie jest to problem XY? – user4815162342