我尝试将我在C中调用system()
来调用ip tuntap add ...
来调用不依赖于system()
调用的C代码。
基本上,当我的应用程序被强制终止时,我使用system("ip tuntap add ...")
调用启动的隧道适配器留在那里是一个问题。
我被告知我可以使用rtnetlink来实现我的目标。我想将以下行转换为不依赖于system()
调用的C代码。我相信如果我使用rtnetlink,当我的应用程序终止时,我提出的隧道适配器会被内核破坏,这是我想要这样做的主要原因。
这是我在C中的当前行:
system("ip tuntap add dev tun1 mode tun");
如果rtnetlink不是我要怎么做的话,还有另一种方法会在我的申请被强行终止时破坏隧道吗?
答案 0 :(得分:3)
@ Jonathon Reinhart在评论中回答了这个问题:
您正在寻找的是非持久性TUN适配器。而不是使用
system("ip tuntap add dev tun1 mode tun");
查看此文件中的tun_alloc
函数:simpletun.c
您可以将其称为:
int tun_fd = tun_alloc("tun1", IFF_TUN | IFF_NO_PI);
当它被调用时,如果它不存在则会创建新隧道并返回隧道的文件描述符。如果它已经存在,它将只返回隧道的文件描述符。
当它创建隧道时,如果您的进程终止,它将主动销毁隧道和任何相关路由。