2

我的应用程序创建了一个点击界面,一切正常。但是在 FreeBSD 上,当它退出时,点击界面仍然存在。要删除它,我必须手动运行以下命令:

sudo ifconfig tap0 destroy

但我想在我的应用程序中以编程方式执行此操作。我在哪里可以找到 SIOCIFDESTROY 的文档?这是我在应用退出时尝试过的操作:

struct ifreq ifr;
memset(&ifr, '\0', sizeof(ifr));
strcpy(ifr.ifr_name, "tap0");
int sock = socket(PF_INET, SOCK_STREAM, 0);
err = ioctl(sock, SIOCIFDESTROY, &ifr);

此时err为零,但app结束时点击界面依然存在。任何人都知道我可能还缺少什么?

4

1 回答 1

2

棘手的部分是试图找到要描述的文档是传递给 ioctl() 的参数。我从来没有找到合适的读物。

原来只需要一个完全空白的 ifreq,只需要设置 tap 接口名称。除了我在问题中包含的原始代码之外,还请注意,我在删除实际的点击接口之前关闭了点击设备文件描述符。我只能想象这也可能是相关的:

    close(device_fd);
    struct ifreq ifr;
    memset(&ifr, '\0', sizeof(ifr));
    strcpy(ifr.ifr_name, "tap0");
    int sock = socket(PF_INET, SOCK_STREAM, 0);
    err = ioctl(sock, SIOCIFDESTROY, &ifr);
于 2014-09-01T08:23:49.033 回答