linux c 检测网络状态
转自:http://stackoverflow.com/questions/808560/how-to-detect-the-physical-connected-state-of-a-network-cable-connector
You want to look at the nodes in
/sys/class/net/
I experimented with mine:
Wire Plugged in:
eth0/carrier:1
eth0/operstate:unknown
Wire Removed:
eth0/carrier:0
eth0/operstate:down
Wire Plugged in Again:
eth0/operstate:up
eth0/carrier:1
GTK 程序 检测 网线是否连接 本地网络状态 C语言实现
转自:http://blog.csdn.net/a954423389/article/details/7327950
主程序创建一个进程, 每2秒查看一下网络状态,然后打印输出
通过检查文件
/sys/class/net/wlan0/operstate (无线网络)
/sys/class/net/eth0/operstate (有线网络)
通过检查文件的内容 判断当前网络是否连接
值为up的时候,是连接 值为down的时候 是断开
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <gtk/gtk.h>
- #include <fcntl.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #define WIRELESS
- #ifdef WIRELESS
- #define INTERNET_STATUS_FILE "/sys/class/net/wlan0/operstate"
- #else
- #define INTERNET_STATUS_FILE "/sys/class/net/eth0/operstate"
- #endif
- #include <sys/wait.h>
- static GtkWidget *fixed;
- static GtkWidget *button1;
- static GtkWidget *button2;
- int running = 1;
- void ring()
- {
- GtkWidget *window;
- GtkWidget *table;
- GtkWidget *button_cancel;
- GtkWidget *label;
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_default_size (GTK_WINDOW(window),100,100);
- gtk_window_set_position (GTK_WINDOW(window),GTK_WIN_POS_CENTER_ALWAYS);
- table = gtk_table_new(10,10,TRUE);
- gtk_container_add (GTK_CONTAINER (window),table);
- label = gtk_label_new("ring");
- button_cancel = gtk_button_new_with_label ("quit");
- gtk_table_attach_defaults (GTK_TABLE(table),button_cancel,2,4,7,9);
- gtk_widget_show_all(window);
- }
- void www_connect_check_real ()
- {
- int ret = -2;
- while (1)
- {
- //一定要只读模式打开,读写模式打开不可以
- ret = open ("/sys/class/net/wlan0/operstate",O_RDONLY);
- if (ret<0) {
- printf("open file operstate failure%d\n",ret);
- return;
- }
- char status[3]="wl\0";
- //printf("%s",status);
- read (ret,status,2);
- status[3] = '\0';
- if (0== strcmp("up",status))
- {
- printf("on line now \n");
- }
- else if (0== strcmp("do",status))
- {
- printf("off off \n");
- }
- else
- printf("unknow error\n");
- close (ret);
- sleep (5);
- }
- }
- int main(int argc,char* argv[])
- {
- GtkWidget *window,*view;
- GtkWidget *vbox,*button,*label;
- /*线程初始化*/
- if (!g_thread_supported())
- g_thread_init(NULL);
- gdk_threads_init();
- gtk_init(&argc,&argv);
- window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(window),"thread apllication");
- vbox=gtk_vbox_new(FALSE,0);
- gtk_container_add(GTK_CONTAINER(window),vbox);
- label=gtk_label_new("Notice! Button is moving");
- gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0);
- view=gtk_viewport_new(NULL,NULL);
- gtk_box_pack_start(GTK_BOX(vbox),view,FALSE,FALSE,0);
- fixed=gtk_fixed_new();
- gtk_widget_set_usize(fixed,330,330);
- gtk_container_add(GTK_CONTAINER(view),fixed);
- button1=gtk_button_new_with_label("1");
- button2=gtk_button_new_with_label("2");
- gtk_fixed_put(GTK_FIXED(fixed),button1,10,10);
- gtk_fixed_put(GTK_FIXED(fixed),button2,40,40);
- GtkWidget *button_ring = gtk_button_new_with_label ("ring");
- gtk_box_pack_start(GTK_BOX(vbox),button_ring,FALSE,FALSE,5);
- g_signal_connect (button_ring,"clicked",G_CALLBACK(ring),NULL);
- /*创建线程*/
- g_thread_create((GThreadFunc)www_connect_check_real,NULL,FALSE,NULL);
- gtk_widget_show_all(window);
- g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
- gtk_container_set_border_width(GTK_CONTAINER(window),10);
- gdk_threads_enter();
- gtk_main();
- gdk_threads_leave();
- return FALSE;
- }
注意:
1,ubuntu 10.04上,当使用静态IP的时候,即使 连接着网络, 文件的值也不up 而是unknown, 这是驱动上的bug,ubuntu 11.10上就正常
http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/5.7_Technical_Notes/kernel.html
2,相关链接
3,也可以使用shell脚本来检测,网上例子很多
4,也可以编写一个内核模块来检测,后期再说,先找工作
5,
[cpp] view plain copy
- //RFC 2863操作状态
- unsigned char operstate;
- /* operstate的可能取值如下:
- enum {
- IF_OPER_UNKNOWN,
- IF_OPER_NOTPRESENT,
- IF_OPER_DOWN,
- IF_OPER_LOWERLAYERDOWN,
- IF_OPER_TESTING,
- IF_OPER_DORMANT,
- IF_OPER_UP,
- };
- **/
- //映射到RFC2863兼容状态的策略
- unsigned char link_mode;
- /* link_mode的可能取值如下:
- enum {
- IF_LINK_MODE_DEFAULT,
- IF_LINK_MODE_DORMANT,
- };
- **/
我们检测的文件内容,其实是这个成员变变量的值,返回值比较多,程序中只是判断了前两个字符
http://blog.csdn.net/npy_lp/article/details/7056903
linux c 检测网络状态
转自:https://blog.csdn.net/linqiongjun86/article/details/48393807
获取wifi网络状态
#include <string.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <sys/types.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
void connect_check_real ()
{
int ret;
int fp;
char status[10];
//一定要只读模式打开,读写模式打开不可以
///sys/class/net/wlan0/carrier 0:down 1:up
fp = open ("/sys/class/net/wlan0/operstate",O_RDONLY);
if (fp<0) {
printf("open file operstate failure%d\n",fp);
return;
}
memset(status,0,sizeof(status));
ret = read (fp,status,10);
printf("status:%s\n",status);
if (NULL != strstr(status,"up"))
{
printf("on line now \n");
}
else if (NULL != strstr(status,"down"))
{
printf("off off \n");
}
else
printf("unknow error\n");
close (fp);
}
linux c 检测网络状态的更多相关文章
- iOS开发——网络篇——数据安全(MD5),HTTPS,检测网络状态
一.数据安全 1.提交用户的隐私数据一定要使用POST请求提交用户的隐私数据GET请求的所有参数都直接暴露在URL中请求的URL一般会记录在服务器的访问日志中服务器的访问日志是黑客攻击的重点对象之一 ...
- iOS开发网络篇—Reachability检测网络状态
前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理.最好能监听设备的网络状态的改变,当设备网络状态连接.断开时,程序也 ...
- [iOS 多线程 & 网络 - 2.8] - 检测网络状态
A.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的:(1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能)(2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 ...
- iOS 检测网络状态 自动判断 认为提示网络改变
检测网络状态 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是让用户了解自己的网络状态,防止一些误会(比如怪应用无能)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验WIFI\3G ...
- iOS开发 - 检测网络状态(WIFI、2G/3G/4G)
本文转载至 http://blog.csdn.net/wangzi11322/article/details/45580917 检测网络状态 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是 ...
- iOS网络4——Reachability检测网络状态
一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发. 其实在网络开发中还有比较常用的就是网络 ...
- iOS Reachability检测网络状态
一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发.其实在网络开发中还有比较常用的就是网络状 ...
- iOS 检测网络状态
一般有两种方式,都是第三方的框架,轮子嘛,能用就先用着,后面再优化. 一:Reachability 1.首先在AppDelegate.h添加头文件"Reachability.h", ...
- Reachability 检测网络状态
-(void)viewWillAppear:(BOOL)animated { [IOSExcept JudgeNetwork];//联网 NSLog(@"检查网络 请稍后....." ...
随机推荐
- JFACE-SWT开发记录
需要的工具 1.Eclipse 2.JDK 3.exe4j 4.Eclipse附加插件windowsBuilder :百度直接搜去eclipse官网下 exe4j配置:http://xiejiangl ...
- Atitit 404错误的排查流程总结 v3 qaf
Atitit 404错误的排查流程总结 v3 qaf 1.1. 用了注解不生效 提示404 Not Found1 1.2. 路径不对了,开头多了个空格1 2. 500 Servlet Excepti ...
- BLIST,BindingSource
//gridControl1.DataSource = BList; //BindingSource bs = new BindingSource(); //bs.DataSource = BList ...
- 【Unity】4.7 摄像机
分类:Unity.C#.VS2015 创建日期:2016-04-11 一.简介 摄像机(Camera)是为玩家捕捉并展示世界的一种设备.场景中至少需要有一台摄像机,也可以在一个场景中使用多台摄像机.这 ...
- J2EE--Servlet生命周期与原理
Servlet是在server上执行的小程序.而在java中应用程序多是在容器中进行生命周期的管理(这里指Tomact容器). Servlet主要的架构图 首先是 web页面通过提交表单 tomact ...
- nginx 404 403等错误信息页面重定向到网站首页或其它事先指定的页面
server { listen 80; server_name www.espressos.cn; location / { root html/www; index index.html index ...
- linux命令(37):paste,合并两个文件,对应行为一行
paste的格式为: paste -d -s -file1 file2 选项的含义如下: -d 指定不同于空格或t a b键的域分隔符.例如用@分隔域,使用- d @.如果不指定,默认用空格分割 -s ...
- Android Service GetSystemService
http://blog.sina.com.cn/s/blog_71d1e4fc0100o8qr.html http://blog.csdn.net/bianhaohui/article/details ...
- FFmpeg Basics学习笔记(2)
帧率 fps的概念 帧率,单位FPS(frame per second), 用于衡量视频每秒的处理帧数,对于编码器而言说明编码器在1s的编码的速度,通常可以使用一帧的编码时间倒数简单计算:对于解码器而 ...
- 将String转换成InputStream
String str = "";//add your string contentInputStream inputStream = new ...