当我们有WiFi连接的时候抓住时机

我需要编写遵循以下步骤的程序:

  1. 启动程序(守护进程)
  2. 等待(睡眠,阻止),直到我有WiFi连接
  3. 从服务器发送/获取一些数据
  4. 等到wifi连接closures
  5. 转到2

步骤2的问题。当build立networking连接时,我不知道如何捕捉瞬间。 有/proc/net/wireless entry ,有关可用的无线连接的信息出现,但试图用inotify监视它没有成功。 networking连接是asynchronousbuild立的。

这里是我的testing代码inotify(主要从R.Loves书中复制):

 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/inotify.h> #include <sys/select.h> #define BUF_LEN 1024 int main() { int fd, wd, rc; char buf[BUF_LEN]; ssize_t len, i = 0; static fd_set read_fds; fd = inotify_init(); if (fd == -1) { perror("inotify_init"); exit(EXIT_FAILURE); } wd = inotify_add_watch(fd, "/proc/net/wireless", IN_ALL_EVENTS); if (wd == -1) { perror("inotify_add_watch"); exit(EXIT_FAILURE); } for (;;) { FD_ZERO(&read_fds); FD_SET(wd, &read_fds); rc = select(wd + 1, &read_fds, NULL, NULL, NULL); if (rc == -1) perror("select"); len = read(fd, buf, BUF_LEN); while (i < len) { struct inotify_event *event = (struct inotify_event *) &buf[i]; printf("wd=%d mask=%d cookie=%d len=%d dir=%s\n", event->wd, event->mask, event->cookie, event->len, (event-> mask & IN_ISDIR) ? "yes" : "no"); if (event->len) printf("name=%s\n", event->name); i += sizeof(struct inotify_event) + event->len; } sleep(1); } return 0; } 

当我做cat /proc/net/wireless时候,它只能捕捉到它

问:如何捕捉瞬间,当我有networking连接运行(wifi),只使用Linuxfunction?

PS这是我在这里的第一篇文章,希望一切都好。

你可以通过netlink接口rtnetlink检测网络连接(不仅仅是wifi)何时连接。

这不是一个简单的接口,所以你可能希望调用进程“ip monitor link”。 如果你看到接口有LOWER_UP标志,这意味着它已经准备好发送/接收(编辑:你也可能想检查NO_CARRIER标志是否缺席;参见Simon的评论)。

但是,也有一个问题,你可能会遇到像NetworkManager这样的守护进程的竞争状态,如果这样配置的话,在链路变得可用之后尝试获取IP地址。