使用ioctl函数打开tun设备时遇到的问题--operation not permmitted!
来源:互联网 发布:要做淘宝店的供货商 编辑:程序博客网 时间:2024/05/23 05:10
最近在写一些很重要的东西,但是流年不利,总是遇到很多很多问题,这不,上篇文章刚解决了如何安装tun
模块的问题.还没有得瑟多久呢,立马踩到坑了,我用c
编码时,试图打开虚拟的tun
设备的时候老是出现这个玩意.
确定你的设备存在tun
模块之后,你用下面的命令建立一个设备文件:
mknod /dev/net/tun c 10 200
参数c
表示是字符设备,10
和200
分别是主设备号和次设备号.
接下来,我们可以测试一下,打开/dev/net/tun
设备,下面是非常简单的一个测试程序:
#include <unistd.h>#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netinet/ip.h> #include <linux/if_ether.h> #include <linux/if_tun.h>#include <linux/if.h>#include <fcntl.h>#include <sys/ioctl.h>int tun_alloc(char dev[IFNAMSIZ]){ struct ifreq ifr; int fd, err; if ((fd = open("/dev/net/tun", O_RDWR)) < 0) { perror("open"); return -1; } bzero(&ifr, sizeof(ifr)); ifr.ifr_flags = IFF_TUN | IFF_NO_PI; if (*dev) { strncpy(ifr.ifr_name, dev, IFNAMSIZ); } if ((err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0) { perror("ioctl TUNSETIFF"); close(fd); return err; } strcpy(dev, ifr.ifr_name); return fd;}int main(int argc, char *argv[]){ char tun_name[IFNAMSIZ]; tun_name[0] = '\0'; tun_alloc(tun_name); getchar(); return 0;}
在执行这个程序的时候,我经常收到这样的错误信息:
ioctl TUNSETIFF: Operation not permitted
当然,我将/dev/net/tun
文件添加了可读可写属性,不然的话,程序是执行不到ioctl
的.
我在网上找了很久,并没有找到很好的解决方案,但是最近看了一下别人的执行过程,我发现我做错了一件很离谱的事情,那就是我并没有在sudo
下运行这个程序,然后我尝试了一下,然后成功了.
如果你想用gdb
来调试这个代码,也必须先加sudo
,类似这样:
sudo gdb programmar_name
如果你用VisualGDB
在调试程序,可以参照下面的图片:
好吧,希望对你有帮助.
0 0
- 使用ioctl函数打开tun设备时遇到的问题--operation not permmitted!
- Ioctl设备方法学习中遇到的一些问题
- 设备驱动的ioctl函数
- 使用Jedis遇到 ERR operation not permitted
- ioctl函数的使用
- ioctl函数的使用
- ioctl函数的使用
- 函数ioctl的使用
- ioctl函数的一些问题
- g++编译C++11遇到的问题:Enable multithreading to use std::thread: Operation not permitted
- linux函数ioctl的使用
- TUN/TAP设备浅析(三) -- TUN/TAP设备的应用
- 使用 ShellExecute 打开文件属性遇到的问题
- 遇到的问题----s标签使用时显示not found
- ioctl()函数(控制I/O设备的函数)
- TUN/TAP设备浅析(二) -- TUN/TAP的编程
- 虚拟网卡TUN/TAP设备使用实例
- 虚拟网卡TUN/TAP设备使用实例
- Quartus/FPGA/Verilog HDL【学习笔记001】
- Java程序员学习路线
- STC15单片机6路专用PWM
- java获取jsp汉字出现乱码
- Anddroid问题总结
- 使用ioctl函数打开tun设备时遇到的问题--operation not permmitted!
- 分解整数, 列出所有加法组合
- Matlab fplot函数详解
- Linux中exit()函数和atexit函数
- MySQL命令大全
- RxJava操作符(二) __变换操作
- word2vec 用于训练数据,生成模型
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(下)
- 一本书读完,什么都记不住怎么办?