Linux c 检测当前网卡是否已经启动

思路:

  1、socket 建立一个数据报套接字。

       2、定义一个struct ifreq ifr 结构体。将网络名称如“eth0” 赋值给ifr结构体的ifr.ifr_name。

       3、调用ioctl(sockfd, SIOCGIFFLAGS, &ifr) 获取网络标识。

如需设置网络标识,更改ifr结构体调用ioctl(sockfd, SIOCSIFFLAGS, &ifr) 进行设置。

       4、比对网络标识来确定网络是否正在运行。ifr.ifr_ifru.ifru_flags &IFF_RUNNING。

 

int GetNetStatus(const char *ifname)
{
    struct ifreq ifr;
    int sockfd;

    if((sockfd = Socket(AF_INET, SOCK_DGRAM, 0)) < 0)
    {
        printf("socket create error!\n");
        return - 1;
    }

    memset(&ifr, 0, sizeof(ifr));
    strncpy(ifr.ifr_name, ifname, IFNAMSIZ);

    if(ioctl(sockfd, SIOCGIFFLAGS, &ifr) < 0)
    {
        Close(sockfd);
        return - 1;
    }
    Close(sockfd);
    if(ifr.ifr_ifru.ifru_flags &IFF_RUNNING)
    {
        return 1;
    }
    else
    {
        return 0;
    }
   
}

 

struct ifreq 结构体的详细介绍可参考。

struct ifreq学习和实例 - 走看看 (zoukankan.com)

 这个结构定义在/usr/include/net/if.h,用来配置和获取ip地址,掩码,MTU等接口信息的。


/* Interface request structure used for socket ioctl's. All interface
ioctl's must have parameter definitions which begin with ifr_name.
The remainder may be interface specific. */

struct ifreq
{
# define IFHWADDRLEN 6
# define IFNAMSIZ IF_NAMESIZE
union
{
char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "en0". */
} ifr_ifrn;

union
{
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
struct sockaddr ifru_netmask;
struct sockaddr ifru_hwaddr;
short int ifru_flags;
int ifru_ivalue;
int ifru_mtu;
struct ifmap ifru_map;
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
char ifru_newname[IFNAMSIZ];
__caddr_t ifru_data;
} ifr_ifru;
};
# define ifr_name ifr_ifrn.ifrn_name /* interface name */
# define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
# define ifr_addr ifr_ifru.ifru_addr /* address */
# define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */
# define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
# define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */
# define ifr_flags ifr_ifru.ifru_flags /* flags */
# define ifr_metric ifr_ifru.ifru_ivalue /* metric */
# define ifr_mtu ifr_ifru.ifru_mtu /* mtu */
# define ifr_map ifr_ifru.ifru_map /* device map */
# define ifr_slave ifr_ifru.ifru_slave /* slave device */
# define ifr_data ifr_ifru.ifru_data /* for use by interface */
# define ifr_ifindex ifr_ifru.ifru_ivalue /* interface index */
# define ifr_bandwidth ifr_ifru.ifru_ivalue /* link bandwidth */
# define ifr_qlen ifr_ifru.ifru_ivalue /* queue length */
# define ifr_newname ifr_ifru.ifru_newname /* New name */
# define _IOT_ifreq _IOT(_IOTS(char),IFNAMSIZ,_IOTS(char),16,0,0)
# define _IOT_ifreq_short _IOT(_IOTS(char),IFNAMSIZ,_IOTS(short),1,0,0)
# define _IOT_ifreq_int _IOT(_IOTS(char),IFNAMSIZ,_IOTS(int),1,0,0)

 

 

 

 

 

实例一,获取网卡的IP地址:
#include &lt;string.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;sys/ioctl.h&gt;
#include &lt;net/if.h&gt;
#include &lt;stdio.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;arpa/inet.h&gt;
int main()
{
int inet_sock;
struct ifreq ifr;
inet_sock = socket(AF_INET, SOCK_DGRAM, 0);

strcpy(ifr.ifr_name, "eth0");
//SIOCGIFADDR标志代表获取接口地址
if (ioctl(inet_sock, SIOCGIFADDR, &amp;ifr) &lt; 0)
perror("ioctl");
printf("%s
", inet_ntoa(((struct sockaddr_in*)&amp;(ifr.ifr_addr))-&gt;sin_addr));
return 0;
}
实例二,实现简单ifconfig功能:
/**
* file getifstat.c
* author wzj
* rief 访问这个struct ifconf 修改,查询状态
* version
*
ote
* date: 2012年08月11日星期六22:55:25
*/
#include &lt;net/if.h&gt; /* for ifconf */
#include &lt;linux/sockios.h&gt; /* for net status mask */
#include &lt;netinet/in.h&gt; /* for sockaddr_in */
#include &lt;sys/socket.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/ioctl.h&gt;
#include &lt;stdio.h&gt;

#define MAX_INTERFACE (16)

void port_status(unsigned int flags);

/* set == 0: do clean , set == 1: do set! */
int set_if_flags(char *pif_name, int sock, int status, int set)
{
struct ifreq ifr;
int ret = 0;

strncpy(ifr.ifr_name, pif_name, strlen(pif_name) + 1);
ret = ioctl(sock, SIOCGIFFLAGS, &amp;ifr);
if(ret)
return -1;
/* set or clean */
if(set)
ifr.ifr_flags |= status;
else
ifr.ifr_flags &amp;= ~status;
/* set flags */
ret = ioctl(sock, SIOCSIFFLAGS, &amp;ifr);
if(ret)
return -1;

return 0;
}

int get_if_info(int fd)
{
struct ifreq buf[MAX_INTERFACE];
struct ifconf ifc;
int ret = 0;
int if_num = 0;

ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t) buf;

ret = ioctl(fd, SIOCGIFCONF, (char*)&amp;ifc);
if(ret)
{
printf("get if config info failed");
return -1;
}
/* 网口总数 ifc.ifc_len 应该是一个出入参数 */
if_num = ifc.ifc_len/sizeof(struct ifreq);
printf("interface num is interface = %d
", if_num);
while(if_num-- &gt; 0)
{
printf("net device: %s
", buf[if_num].ifr_name);
/* 获取第n个网口信息 */
ret = ioctl(fd, SIOCGIFFLAGS, (char*)&amp;buf[if_num]);
if(ret)
continue;

/* 获取网口状态 */
port_status(buf[if_num].ifr_flags);

/* 获取当前网卡的ip地址 */
ret = ioctl(fd, SIOCGIFADDR, (char*)&amp;buf[if_num]);
if(ret)
continue;
printf("IP address is:
%s
", inet_ntoa(((struct sockaddr_in *)(&amp;buf[if_num].ifr_addr))-&gt;sin_addr));

/* 获取当前网卡的mac */
ret = ioctl(fd, SIOCGIFHWADDR, (char*)&amp;buf[if_num]);
if(ret)
continue;

printf("%02x:%02x:%02x:%02x:%02x:%02x

",
(unsigned char)buf[if_num].ifr_hwaddr.sa_data[0],
(unsigned char)buf[if_num].ifr_hwaddr.sa_data[1],
(unsigned char)buf[if_num].ifr_hwaddr.sa_data[2],
(unsigned char)buf[if_num].ifr_hwaddr.sa_data[3],
(unsigned char)buf[if_num].ifr_hwaddr.sa_data[4],
(unsigned char)buf[if_num].ifr_hwaddr.sa_data[5]
);
}
}

void port_status(unsigned int flags)
{
if(flags &amp; IFF_UP)
{
printf("is up
");
}
if(flags &amp; IFF_BROADCAST)
{
printf("is broadcast
");
}
if(flags &amp; IFF_LOOPBACK)
{
printf("is loop back
");
}
if(flags &amp; IFF_POINTOPOINT)
{
printf("is point to point
");
}
if(flags &amp; IFF_RUNNING)
{
printf("is running
");
}
if(flags &amp; IFF_PROMISC)
{
printf("is promisc
");
}
}

int main()
{
int fd;

fd = socket(AF_INET, SOCK_DGRAM, 0);
if(fd &gt; 0)
{
get_if_info(fd);
close(fd);
}

return 0;
}
运行结果:
interface num is interface = 2
net device: eth0
is up
is broadcast
is running
IP address is:
192.168.100.200
54:be:f7:33:57:26
net device: lo
is up
is loop back
is running
IP address is:
127.0.0.1
00:00:00:00:00:00
参考转载博客地址:
http://blog.csdn.net/dsg333/article/details/7525634
http://blog.csdn.net/kulung/article/details/6442597
http://blog.csdn.net/joker0910/article/details/7855998

 

本文转载于网络 如有侵权请联系删除

相关文章

  • 微信小游戏的内存调优指南

    微信小游戏开发、测试、现网三阶段的内存调优工具使用指南: 包含微信开发者工具,微信Android性能面板,PerfDog,小游戏云测试和小游戏性能助手等工具。 1.前言在开发微信小游戏的过程中,开发者往往会遇到很多内存问题,如内存泄漏或者内存溢出等。对目前几款微信创意小游戏进行测试发现,微信小游戏运行时的异常Crash多是由于内存占用过多造成的。为了方便开发者调优小游戏内存,本文从开发、测试与现网不同阶段介绍我们常见的内存分析与调优工具。 2.现网数据:为什么要做小游戏内存优化?小游戏数据助手:“小游戏数据助手”是微信发布的官方小程序,支持相关的开发和运营人员查看自身小游戏的运营数据。为了能让开发者掌握游戏的运行性能数据,小游戏框架底层会对现网玩家进行一定概率的采样,采样量可以通过趋势数据勾选得到。需要上报性能数据的玩家会以一定时间间隔(目前为1分钟)上报数据,因此该数值能比较准确地反应玩家真实的游戏体验情况。最终这些数值会呈现在小游戏数据助手提供的“性能分析“板块。 我们可以在左图”概况“中看到整体的内存均值与游戏因内存产生的内存异常退出率,在右图“运行性能”中看到在不同档次的机型

  • Google Authenticator

    一、原理详解(点击图片然后放大查看) 二、验证 1、下载Google谷歌身份验证器。 2、通过Python的qrcode和pyotp模块生成二维码。 3、然后使用下载的谷歌身份验证器扫描生成的二维码如果没有谷歌服务,则选择输入秘钥,在账户明处填入name参数,在秘钥处填入Secret即可。4、对比手机上谷歌验证器显示的6位动态码,你会发现,和【原理详解】中代码计算处的6位动态码是一致的三、源码1、计算GoogleAuthenticator6位动态码#!/usr/bin/envpython #-*-coding:utf-8-*- #GoogleAuthenticator工作原理TOTP(Time-BasedOne-TimePassword) importhmac importhashlib importbase64 importstruct importtime #setup1:base32secret #提示:Secret的长度最好不要超过32 Secret='userxiaosheng' #Secret+='='*(8-len(Secre

  • Spring高频面试题,你能答的上哪些?(高级篇)

    1、什么是Spring框架?Spring框架有哪些主要模块?2、使用Spring框架能带来哪些好处?3、什么是控制反转(IOC)?什么是依赖注入?4、请解释下Spring框架中的IoC?5、BeanFactory和ApplicationContext有什么区别?6、Spring有几种配置方式?7、如何用基于XML配置的方式配置Spring?8、如何用基于Java配置的方式配置Spring?9、怎样用注解的方式配置Spring?10、请解释SpringBean的生命周期?11、SpringBean的作用域之间有什么区别?12、什么是Springinnerbeans?13、Spring框架中的单例Beans是线程安全的么?14、请举例说明如何在Spring中注入一个JavaCollection?15、如何向SpringBean中注入一个Java.util.Properties?16、请解释SpringBean的自动装配?17、请解释自动装配模式的区别?18、如何开启基于注解的自动装配?19、请举例解释@Required注解?20、请举例解释@Autowired注解?21、请举例说明@Qua

  • 我是个Java开发者,我到底要不要学大数据开发?

    一入编程深似海,从此女神是路人。没办法,这行就这样。你不学Spring,总不是跑去学JVM/微服务架构/分布式去了,不断学习根本避免不了。所以关键在于把时间投在学什么上比较划算。 明确表达我的观点,作为一名Javaer进阶大数据开发,短期小有所成,中期快速发展,长期来看Java程序员发展受阻,在数据驱动一切的时代,转型大数据行业更是未来发展的必然趋势。相比其他开发岗位,Java转型大数数据开发有着一骑绝尘的优势。那么,想要转型大数据开发工程师需要哪些必备技术储备呢?小编从招聘网站上调研多次,整理了一份BAT大数据工程师JD的技能图谱,对于想要提升技术能力转型BigData的Java程序员们,提供一些学习方向上的借鉴和参考。均来自BAT、TMD等大厂真实的岗位需求高清大图文末[添加微信]免费领取除去技能图谱外,还额外分享一套vip视频,廖雪峰联合前京东首席大数据架构师老戚,专门选取了Hadoop底层框架原理和Spark核心原理两大难点(也是入门大数据的核心重点技术),里面包含了老戚多年的架构经验总结和梳理,经过1个月梳理和准备录制出来的视频,一定能帮大家加深对大数据开发底层框架的理解和学

  • 李飞飞夫妇打造了两件秘密武器,让机器人快速学习人类技能

    栗子夏乙发自凹非寺 量子位报道|公众号QbitAI聚精会神,紧盯电脑屏幕上的一支机械臂,捧着手机:移动、下降、抓住,抬起!别误会,这位小姐姐并不是在远程抓娃娃,而是在为机器人创造学习资料。在她和她的同道中人教育下,你将看到会端锅、会堆积木、会把螺丝螺帽组装在一起、甚至还会分拣物品的机器人。 从“抓娃娃”,到机器人学会种种技能,这两件看起来毫无关系的事情之间,斯坦福大学计算机视觉与学习实验室的一个团队正在用两项研究搭建桥梁。而带领这个团队的,正是最近从Google回到斯坦福教学岗位的李飞飞和她的丈夫SilvioSavarese。我们先来看第一项研究,也就是这个“抓娃娃”的系统。“抓娃娃”前面看到的“抓娃娃”平台,名叫RoboTurk。现在,人类已经用它已经为机器人生产了137.5小时的教学视频,演示了3224次抓取、组装物品的动作。其中,有1071次成功的抓取,1147次成功的组装。听起来很多?其实做起来并不难,生产这么多的教学资料,总共只用了22小时。李飞飞团队说,这是因为他们的RoboTurk,本来就是个快速众包制造大规模机器人控制数据集的利器。RoboTurk到底怎么用呢?这个平台

  • Python 字典(Dictionary)

    Python字典(Dictionary)字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如下所示:d={key1:value1,key2:value2}复制键(key)必须是唯一的,但值(value)则可以更改。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。一个简单的字典实例:dic={'name':'zhang','age':'28','gender':'Man'}复制也可如此创建字典:dict1={'abc':456}; dict2={'abc':123,98.6:37};复制访问字典里的值把相应的键放入熟悉的方括弧,如下实例:#!/usr/bin/python dict={'Name':'Zhang','Age':28

  • 面向开发者的Cloud Foundry

    CloudFoundry是一个流行的开源PaaS(PlatformasaService平台即服务)云平台。CloudFoundry可以用在你自己部署的基础设施上,也可以在诸如Amazonwebservices(AWS亚马逊网络服务)、Azure(微软的公有云平台)、VMware(虚拟机软件)或vSphere(VMware公司的虚拟化平台)中任何一个laaS(InfrastructureasaService基础设施即服务)上使用。它可以使用BOSH(开源工具链)部署系统进行部署。CloudFoundry提供了一个可以轻松运行、扩展和维护应用程序的环境。CloudFoundry支持大部分的开发语言和系统环境,比如Java、nodejs、Ruby、Python等等。Pivotal公司有一个云计算的商业实例,叫做AWS云之上的PivotalWebService(PWSPivotal网络服务)。该公司还提供了PCF(CloudFoundry商业版)的轻量级发行版,称之为PCFDev(CloudFoundry开发版),该版本是为应用开发人员准备的,在单独一台机器上即可运行。CloudFoundry

  • 腾讯云云监控创建云监控告警策略api接口

    1.接口描述接口请求域名:monitor.tencentcloudapi.com。 创建云监控告警策略 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:CreateAlarmPolicy。 Version 是 String 公共参数,本接口取值:2018-07-24。 Region 是 String 公共参数,详见产品支持的地域列表。 Module 是 String 固定值,为"monitor" PolicyName 是 String 策略名称,不超过20字符 MonitorType 是 String 监控类型MT_QCE=云产品监控 Namespace 是 String 告警策略类型,由Descr

  • [Android开发学iOS系列] 工具篇: Xcode使用和快捷键

    [Android开发学iOS系列]工具篇:Xcode使用和快捷键 工欲善其事必先利其器. 编辑 Cmd+N:新建文件 Option+Cmd+N:新建文件夹 Cmd+/:注释 Ctrl+I:formatindentation,(但是使用这个快捷键要小心,可能会在你的空行里加入不必要的首行缩进,所以没事不要全选再format.) Ctrl+Cmd+Space→Emoji Opt+Cmd+,:分割当前编辑窗口 Cmd+Shift+J:显示当前文件在navigator窗口中的位置 Cmd+Opt+左/右:折叠/展开 菜单窗口 Ctrl+Click:相当于右键,或者mactrackpad上的两指点击.会弹出菜单 Cmd+Click:会弹出一个快捷action菜单 Cmd+,:打开preferences界面 Cmd+Shift+0:打开documentation Cmd+0:隐藏/显示左边的navigator窗口 Ctrl+Cmd+Shift+A:看git提交历史 文件导航 Shift+Cmd+O:按文件名查找 Ctrl+Cmd+J:跳转到定义.效果同:Ctrl+Cmd+Click Ct

  • 活用UML-软件设计高手(广州 2014年6月14-15日)

      我们将在广州为您奉献高级技术课程”活用UML-软件设计高手“,首席专家张老师将会为您分享软件架构设计、数据库设计、用户体验设计及详细设计的最佳实践,帮助您成为优秀的软件设计师!时间:2014.06.14-15(周六日),上午9:00-12:00,下午14:00-17:00(每天6小时,共12小时)地点:汉庭快捷(天河店)10楼会议室,详细地址:广州市天河区天河路97-99号(距广州购书中心200米)1.课程概述课程全程将会围绕一个具体案例展开,从需求分析开始到架构设计、数据库设计、用户体验设计及详细设计。该系统的特点:1)业务不是很复杂,每位学员都可以理解,节省学员理解业务的时间,也有利于学员学习如何分析需求。2)在技术上有一定难度,例如:支持移动办公,支持工作流,权限系统需要重用等。同时课程会通过其他一些小案例,对该系统不能覆盖的知识点进行补充。2.学员收益1)对于个人来说,提升您的价值,帮助您成为优秀的软件设计师。2)对于公司来说,提升组织的系统分析及软件设计水平,并能将这些技能“固化”为公司的资产,不会因为人员流动而流失。3.适合听众项目经理、系统分析师、软件设计师

  • (转)json格式脚本转成对象

    在测试杰夫接口编写脚本的时候,一般研发提供的入参是json格式的数据,但是调用接口的方法的时候需要传入对象,杰夫的jar包中本身带有将json转换成对象的功能,这样就不用我们自己将json转换为对象了,直接用杰夫自带的就可以了,希望该功能可以节省一定的工作量。 具体例子: //需要传入的json格式的数据 StringparamFreightRequestjson="{\"pin\":\"test\",\"applyDate\":1447655985716,\"source\":\"1\",\"totalPrice\":500,\"userLevel\":50,\"provinceId\":8,\"cityId\":617,\"countyId\":20658,\"townId\":0,\"freightInfo\":[{\"freightId\":123456789,\"skuInfo\":[{\"skuId\":22222222,\"num\":15,\"price\":123,\"addFlag\":\"1\",\"storeId\":0,\"storeType\":0,\"fr

  • Golang单测模板与测试脚本

    [本文出自天外归云的博客园] 遵循——“步骤固定,注释清晰” 单测模板 下面是一个标准的单测模板✍?包含的步骤: 准备测试数据 Mock+Stub(可选,灵活位,在7前即可) 定义测试用例参数 定义测试用例预期结果 定义并初始化测试用例 遍历用例 执行待测方法+断言 可以直接复制粘贴下面的空模板代码使用: packageunityportal import( "testing" "xx/mocker" ) funcTestTemplate(t*testing.T){ //Mock mock:=mocker.Create() defermock.Reset() //定义测试用例参数 typeargsstruct{ customStubfunc(*mocker.Builder) } //定义测试用例预期结果 typewantstruct{ } //定义并初始化测试用例 tests:=[]struct{ namestring argsargs wantwant }{ { name:"用例1", args:args{

  • sqoop笔记

    sqoop应该算是一个ETL工具,方便的数据导入导出功能。 #Sqoop用来导出hive数据到mysql的工具 #下载sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz cd/usr/local/src #rz上传到hadoop主机上 tarzxvfsqoop-1.4.7.bin__hadoop-2.6.0.tar.gz mvsqoop-1.4.7.bin__hadoop-2.6.0sqoop-1.4.7 cd/usr/local/src/sqoop-1.4.7/conf cpsqoop-env-template.shsqoop-env.sh vimsqoop-env.sh #小技巧:光标在需要的地方,输入命令:r!whichhadoop可以得到hadoop的路径,删除后面多余的即可。 exportHADOOP_COMMON_HOME=/usr/local/src/hadoop-2.7.5 exportHADOOP_MAPRED_HOME=/usr/local/src/hadoop-2.7.5 exportHIVE_HOME=/usr/local/sr

  • 深度学习常用数据集 API(包括 Fashion MNIST)

    基准数据集 深度学习中经常会使用一些基准数据集进行一些测试。其中MNIST,Cifar10,cifar100,Fashion-MNIST数据集常常被人们拿来当作练手的数据集。为了方便,诸如Keras、MXNet、Tensorflow都封装了自己的基础数据集,如MNIST、cifar等。如果我们要在不同平台使用这些数据集,还需要了解那些框架是如何组织这些数据集的,需要花费一些不必要的时间学习它们的API。为此,我们为何不创建属于自己的数据集呢?下面我仅仅使用了Numpy来实现数据集MNIST、FashionMNIST、Cifa10、Cifar100的操作,并封装为HDF5,这样该数据集的可扩展性就会大大的增强,并且还可以被其他的编程语言(如Matlab)来获取和使用。下面主要介绍如何通过创建的API来实现数据集的封装。 环境搭建 我使用了Anaconda3这个十分好用的包管理工具,来减少管理和安装一些必须的包。下面我们载入该API必备的包: importstruct#处理二进制文件 importnumpyasnp#对矩阵运算很友好 importgzip,tarfile#对压缩文件进行处理

  • session共享的范围

    session在一个会话中都是有效的,而在同一个会话中你可以访问多个servlet, 也就是说在不同的servlet中session是相同的,是可以共享的。

  • 【博客客园美化】之 设置背景+背景音乐+超链接设置+快捷定位 +其他功能+雪花特效

    大纲     1.背景设置      2.音乐设置      3.超链接      4.快捷定位     5.其他功能        6.本博客粉色雪花特效(附上代码)   1.背景设置 (1)设置-选择合适的背景         (2)自己选择喜欢的即可               2.音乐设置 (1)申请JS权限,一般需要1-2天                 (2)网易云音乐-生成外链接音乐-复制HTML代码          

  • fastcgi代理

    一、fastcgi代理 1、示意图 2、fastcgi代理配置语法 a、设置PHP服务代理地址 Syntax:fastcgi_passaddress; Default:— Context:location,ifinlocation复制 address可以是域名,ip:port,如: fastcgi_passlocalhost:9000;复制 或者Linux下的socket fastcgi_passunix:/tmp/fastcgi.socket;复制 Nginx和PHP的进程是在同一台机器上的话,那么也可以选择Linux下的socket,进程间通信的方式。 b、设置主页 Syntax:fastcgi_indexname; Default:— Context:http,server,location复制 fastcgi_index用来设置首页文件,一般要结合fastcgi_param一起来设置。 设置变量 Syntax:fastcgi_paramparametervalue[if_not_empty]; Default:— Context:http,server,

  • TFS 生成配置

     生成  作者:旭东 出处:http://www.cnblogs.com/HQFZ 关于作者:专注于微软平台项目架构、管理和企业解决方案。现主要从事WinForm、ASP.NET、WPF、WCF、等方面的项目开发、架构、管理。如有问题或建议,请不吝指教! 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题,可以联系我,非常感谢。 如果您该文觉得不错或者对你有帮助,请点下推荐,让更多的朋友看到,谢谢!

  • pandas:数据分析

    pandas:数据分析 pandas是一个强大的Python数据分析的工具包。pandas是基于NumPy构建的。 pandas的主要功能具备对其功能的数据结构DataFrame、Series集成时间序列功能提供丰富的数学运算和操作灵活处理缺失数据 安装方法:pipinstallpandas引用方法:importpandasaspd pandas:Series Series是一种类似于一位数组的对象,由一组数据和一组与之相关的数据标签(索引)组成。 创建方式: pd.Series([4,7,-5,3])pd.Series([4,7,-5,3],index=['a','b','c','d'])pd.Series({'a':1,'b':2})pd.Series(0,index=['a','b','c','d’]) 获取值数组和索引数组:values属性和index属性Series比较像列表(数组)和字典的结合体。Series支持数组的特性:从ndarray创建Series:Series(arr)与标量运算:sr*2两个Series运算:sr1+sr2索引:sr[0],sr[[1,2,4]]

  • Firewalld防火墙

    一,firewalld概述 1.firewalld防火墙 firewalld防火墙是Centos7系统默认的防火墙管理工具,取代了之前的iptables防火墙,也是工作在网络层,属于包过滤防火墙 firewalld和iptables都是用来管理防火墙的工具(属于用户态)来定义防火墙的各种规则功能,内部结构都指向netfilter网络过滤子系统(属于内核态)来实现包过滤防火墙功能。 firewalld提供了支持网络区域所定义的网络连接以及接口安全等级的动态防火墙管理工具。 它支持IPv4、IPv6防火墙设置以及以太网桥(在某些高级服务可能会用到,比如云计算),并且拥有两种配置模式:运行时配置与永久配置。 复制 2.区别 3.区域 区域:firewalld防火墙为了简化管理,将所有网络流量分为多个区域(zone)。然后根据数据包的源IP地址或传入的网络接口等条件将流量传入相应区域。每个区域都定义了自己打开或者关闭的端口和服务列表。 九个区域: 1.trusted(信任区域):允许所有的传入流量。 2.public(公共区域):允许与ssh或dhcpv6-client预定义服务匹配的传入流

  • Python成长之路 第一篇 《Python基础》

    1.python文件命名         -后缀名可以是任意的,但为规范便于识别,后缀名应为.py 2.两种执行方式     python解释器  py文件路径     python  进入解释器:实时输入并获取到执行结果 3.解释器路径         在Linux系统中应添加 #!/user/bin/envpython    ,windows系统中可不添加 4.编码         #-*-coding:utf8-*- (在python3中可不加,python只要出现中文头部必须加)          asci

相关推荐

推荐阅读