TUNSETIFF
ioctlの定義が矛盾しています。私は私のシステムでlinux/if_tun.h
を見れば、私はこの行を参照してください。TUNSETIFF ioctlタイプの混乱
#define TUNSETIFF _IOW('T', 202, int)
これはTUNSETIFF ioctlのはint
へのポインタを取ることを示しています。また、TUNSETIFF
の値を出力すると、1074025674が出力されます。マスクを外すと、このioctlはサイズが4バイトのデータを取ります。
しかし、TUNSETIFF
のドキュメントを見ると、struct ifreq
にポインタを渡す場合があります。たとえば、official documentation:
#include <linux/if.h>
#include <linux/if_tun.h>
int tun_alloc(char *dev)
{
struct ifreq ifr;
int fd, err;
if((fd = open("/dev/net/tun", O_RDWR)) < 0)
return tun_alloc_old(dev);
memset(&ifr, 0, sizeof(ifr));
/* Flags: IFF_TUN - TUN device (no Ethernet headers)
* IFF_TAP - TAP device
*
* IFF_NO_PI - Do not provide packet information
*/
ifr.ifr_flags = IFF_TUN;
if(*dev)
strncpy(ifr.ifr_name, dev, IFNAMSIZ);
if((err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0){
close(fd);
return err;
}
strcpy(dev, ifr.ifr_name);
return fd;
}
この矛盾はどうしてですか?ヘッダーファイルの間違いですか?
を助けることを願っ同じエラーを得ました? – FGreg