http://www.askwan.com/post/16/
1、安装: pkg_add -rv minicom
2、安装完成后,# rehash,然后运行# minicom 进行配置。配置和使用前最好查询一下minicom的man页,学习一下
它的键盘操作命令。注意,如果在/usr/local/etc/minicom/下没有etc目录,就要新建一个,用于保存配置文件。
3、进入minocom界面后,按Ctrl+A调出命令模式后,再按o命令,进入配置菜单。主要调整两样,一个是串口号,一个是波特率。
我的配置是:串口设置填/dev/cuad0,波特率部份填9600 8N1。
4、配置后,选择“Save setup as...”把它存为cisco。用X命令退出minicom。
5、用串行线连接电脑串口与交换机的控制口(Console)后,用# minicom 进入minicom即可!
2、安装完成后,# rehash,然后运行# minicom 进行配置。配置和使用前最好查询一下minicom的man页,学习一下
它的键盘操作命令。注意,如果在/usr/local/etc/minicom/下没有etc目录,就要新建一个,用于保存配置文件。
3、进入minocom界面后,按Ctrl+A调出命令模式后,再按o命令,进入配置菜单。主要调整两样,一个是串口号,一个是波特率。
我的配置是:串口设置填/dev/cuad0,波特率部份填9600 8N1。
4、配置后,选择“Save setup as...”把它存为cisco。用X命令退出minicom。
5、用串行线连接电脑串口与交换机的控制口(Console)后,用# minicom 进入minicom即可!
纸上得来终觉浅, 绝知此事要躬行,路慢慢其修远兮,吾将上下而求索,究天人之际,通古今之变,成一家之言!
一个人的性格,会成为他今后命运的指针 吗?
从前我太忙,忙着询问别人,反而忽略了最重要的事---回到自己身上找,因一个人的性格,会成为他今后命运的指针,建立自我,追求忘我。
一个人的性格,会成为他今后命运的指针 吗?
从前我太忙,忙着询问别人,反而忽略了最重要的事---回到自己身上找,因一个人的性格,会成为他今后命运的指针,建立自我,追求忘我。
今天日期
$today=date("Y-m-d");
昨天日期
$yesterday = date("Y-m-d", mktime(0, 0, 0,date("m"),date("d")-1,date("Y")));
本周开始日期(周一至周日算法)
$weekstart = date('Y-m-d',strtotime('last monday'));
本周结束日期(周一至周日算法)
$weekend = date("Y-m-d", mktime(0, 0, 0,date("m",strtotime($weekstart)),date("d",strtotime($weekstart))+6,date("Y",strtotime($weekstart))));
上周开始日期(周一至周日算法)
$pre_weekend = date('Y-m-d',strtotime('last sunday'));
上周结束日期(周一至周日算法)
$pre_weekstart = date("Y-m-d", mktime(0, 0, 0,date("m",strtotime($weekend)),date("d",strtotime($weekend))-6,date("Y",strtotime($weekend))));
$today=date("Y-m-d");
昨天日期
$yesterday = date("Y-m-d", mktime(0, 0, 0,date("m"),date("d")-1,date("Y")));
本周开始日期(周一至周日算法)
$weekstart = date('Y-m-d',strtotime('last monday'));
本周结束日期(周一至周日算法)
$weekend = date("Y-m-d", mktime(0, 0, 0,date("m",strtotime($weekstart)),date("d",strtotime($weekstart))+6,date("Y",strtotime($weekstart))));
上周开始日期(周一至周日算法)
$pre_weekend = date('Y-m-d',strtotime('last sunday'));
上周结束日期(周一至周日算法)
$pre_weekstart = date("Y-m-d", mktime(0, 0, 0,date("m",strtotime($weekend)),date("d",strtotime($weekend))-6,date("Y",strtotime($weekend))));
#include <stdio.h>
int a()
{ int b;
int a= 0x1e;
b = a+1;
return b;
printf("%d",b);
}
int main()
{
int dd;
dd = a();
printf("%d",dd);
}
int a()
{ int b;
int a= 0x1e;
b = a+1;
return b;
printf("%d",b);
}
int main()
{
int dd;
dd = a();
printf("%d",dd);
}
富家子弟等于温室长大的植物,无论是大树或是什么植物,根部一定不壮,若再放纵他一点,将来他一生辛苦,遇到什么打击,面对逆境他便无法应付,我虽然不是很本事,但我可以说,我这颗小树,是在风雨中,从沙石中长大的。你可以到山上试一试,要拔起从沙石缝中长出来的小植物,是相当费劲。
当然你对i的工作有兴趣,当然你可以做得很好。
香港公司的人要找我,外国公司的人也要找我,我两方面都要照顾,都是这样应付,习惯了,也明白到身处这个职位便要有这种负担!
当然你对i的工作有兴趣,当然你可以做得很好。
香港公司的人要找我,外国公司的人也要找我,我两方面都要照顾,都是这样应付,习惯了,也明白到身处这个职位便要有这种负担!
1、“这第一碗酒,朕要敬给太皇太后孝庄,敬给列祖列宗的在天之灵。朕八岁丧父,九岁丧母,是孝庄太后带着朕,冲破千难险阻,才有今天的大清盛世!孝庄太后,朕想你啊。
还有这第二碗酒,朕要敬给列位臣工,敬给天下子民,敬给今天赴宴的老同年们!六十年来,是你们辅佐朕,保国平安,你们俯首农桑,致使大清的百业兴旺。君、臣、民,三者同德呀,啊!没有你们,记着便没有今日的大清。朕在这儿谢谢你们了。
这第三碗酒啊,朕要敬给朕的死敌们。鳌拜,吴三桂,嘿!郑经,噶尔丹,噢,还有那个朱三太子,啊?嘿,他们都是英雄豪杰呀,啊,他们造就了朕那!他们逼着朕立下了这丰功伟业。朕恨他们,也敬他们。哎,可惜呀,他们都死了,朕寂寞啊!......朕不祝他们死的安宁,祝他们,来生再世再与朕为敌吧!”阅读全文
还有这第二碗酒,朕要敬给列位臣工,敬给天下子民,敬给今天赴宴的老同年们!六十年来,是你们辅佐朕,保国平安,你们俯首农桑,致使大清的百业兴旺。君、臣、民,三者同德呀,啊!没有你们,记着便没有今日的大清。朕在这儿谢谢你们了。
这第三碗酒啊,朕要敬给朕的死敌们。鳌拜,吴三桂,嘿!郑经,噶尔丹,噢,还有那个朱三太子,啊?嘿,他们都是英雄豪杰呀,啊,他们造就了朕那!他们逼着朕立下了这丰功伟业。朕恨他们,也敬他们。哎,可惜呀,他们都死了,朕寂寞啊!......朕不祝他们死的安宁,祝他们,来生再世再与朕为敌吧!”阅读全文
串口编程
查询硬件的方式:查询方式、中断方式、DMA方式。串口很多是使用中断方式,这种方式一般来讲对CPU比较有效。
UART的操作主要包括以下几个部分:
数据发送;数据接受;产生中断;产生波特率;Loopback模式;红外模式;自动流控模式;
串口参数的配置主要包括:波特率、数据位、停止位、流控协议。
在linux下操作串口与操作文件相同。
在使用串口之前必须设置相关配置,包括:波特率、数据位、校验位、停止位等。串口设置由下面结构体实现。
Struct termios{
tcflag_t c_iflag; /* input flags */
tcflag_t c_oflag; /* output flags */
tcflag_t c_cflag; /* control flags */
tcflag_t c_lflag; /* local flags */
cc_t c_cc[NCCS]; /* control character */
};
串口配置流程
1、保存原先串口配置,使用tcgetattr(fd,&oldtio)函数
struct termios newtio,oldtio;
tcgetattr(fd,&oldtio);
2、激活选项,有CLOCAL 和CREAD,用于本地连接和接收使能。
newtio.c_cflag |= CLOCAL | CREAD
3、设置波特率,使用函数cfsetispeed、cfsetospeed。
cfsetipeed(&newtio, B115200);
cfsetospeed(&newtio, B115200);
4、设置数据位,需要使用掩码设置。
newtio.c_cflag &= ~CSIZE;
newtio.c_cflag |= CS8;
5、设置奇偶校验位,使用c_cflag和c_iflag。
设置奇校验:
newtio.c_cflag |= PARENB;
newtio.c_cflag |= PARODD;
newtio.c_iflag |= (INPCK | ISTRIP);
设置欧校验:
newtio.c_iflag |= (INPCK | ISTRIP);
newtio.c_cflag |= PARENB;
newtio.c_cflag &= ~PARODD;
6、设置停止位,通过激活c_cflag中的CSTOPB实现。若停止位为1,则清楚CSTOPB,若停止位为2,则 激活CSTOPB。
newtio.c_cflag &= ~CSTOPB;
7、设置最少字符和等待时间,对于接受字符和等待时间没有特别要求时,可设为0。
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 0;
8、处理要写入的引用对象
tcflush函数刷清(抛弃)输入缓存(终端驱动程序已接收到,但用户程序尚未读)
或输出缓存(用户程序已写,但尚未发送)。
int tcflush(int filedes, int queue)
queue数应当是下列三个常数之一:
TCIFLUSH 刷清输入队列。
TCOFLUSH 刷清输出队列。
TCIOFLUSH 刷清输入、输出队列。
9、激活配置。在完成配置后,需激活配置使其生效。
使用tsettattr()函数。原型:
int tcgetattr(int filedes, struct termios *termptr);
int tcgetattr(int filedes, int opt, const struct termios * termptr);
tcsetattr的参数opt使我们可以指定在什么时候新的终端属性才起作用。opt可以指定wei下列常数中的一 个:
TCSANOW 更改立即发生。
TCSADRAIN 发送了所有输出后更改才发生。若更改输出参数则应使用此选择项。
TCSAFLUSH 发送了所有输出后更改才发生。更进一步,在更改发生时未读的宋有输入数据都被删除(刷清)
使用如:tcsetattr(fd, TCSANOW, &newtio)
打开串口
f d = open("/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);
open函数中除普通参数外,另有两个参数O_NOCTTY和O_NDELAY。
O_NOCTTY:通知linux系统,这个程序不会成为这个端口的控制终端。
O_NDELAY:通知linux系统不关心DCD信号线所处的状态(端口的另一端是否激活或者停止)
然后,恢复串口的状态为阻塞状态,用于等待串口数据的读入。用fcntl函数:
fcntl(fd, F_SETFEL, 0);
接着, 测试打开的文件描述符是否引用一个终端设备,以进一步确认串口是否正确打开.
isatty(STDIN_FILENO);
串口读写
串口的读写与普通文件的读写是一样的,使用read,write函数。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhanghuiliang/archive/2008/05/21/2467040.aspx
查询硬件的方式:查询方式、中断方式、DMA方式。串口很多是使用中断方式,这种方式一般来讲对CPU比较有效。
UART的操作主要包括以下几个部分:
数据发送;数据接受;产生中断;产生波特率;Loopback模式;红外模式;自动流控模式;
串口参数的配置主要包括:波特率、数据位、停止位、流控协议。
在linux下操作串口与操作文件相同。
在使用串口之前必须设置相关配置,包括:波特率、数据位、校验位、停止位等。串口设置由下面结构体实现。
Struct termios{
tcflag_t c_iflag; /* input flags */
tcflag_t c_oflag; /* output flags */
tcflag_t c_cflag; /* control flags */
tcflag_t c_lflag; /* local flags */
cc_t c_cc[NCCS]; /* control character */
};
串口配置流程
1、保存原先串口配置,使用tcgetattr(fd,&oldtio)函数
struct termios newtio,oldtio;
tcgetattr(fd,&oldtio);
2、激活选项,有CLOCAL 和CREAD,用于本地连接和接收使能。
newtio.c_cflag |= CLOCAL | CREAD
3、设置波特率,使用函数cfsetispeed、cfsetospeed。
cfsetipeed(&newtio, B115200);
cfsetospeed(&newtio, B115200);
4、设置数据位,需要使用掩码设置。
newtio.c_cflag &= ~CSIZE;
newtio.c_cflag |= CS8;
5、设置奇偶校验位,使用c_cflag和c_iflag。
设置奇校验:
newtio.c_cflag |= PARENB;
newtio.c_cflag |= PARODD;
newtio.c_iflag |= (INPCK | ISTRIP);
设置欧校验:
newtio.c_iflag |= (INPCK | ISTRIP);
newtio.c_cflag |= PARENB;
newtio.c_cflag &= ~PARODD;
6、设置停止位,通过激活c_cflag中的CSTOPB实现。若停止位为1,则清楚CSTOPB,若停止位为2,则 激活CSTOPB。
newtio.c_cflag &= ~CSTOPB;
7、设置最少字符和等待时间,对于接受字符和等待时间没有特别要求时,可设为0。
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 0;
8、处理要写入的引用对象
tcflush函数刷清(抛弃)输入缓存(终端驱动程序已接收到,但用户程序尚未读)
或输出缓存(用户程序已写,但尚未发送)。
int tcflush(int filedes, int queue)
queue数应当是下列三个常数之一:
TCIFLUSH 刷清输入队列。
TCOFLUSH 刷清输出队列。
TCIOFLUSH 刷清输入、输出队列。
9、激活配置。在完成配置后,需激活配置使其生效。
使用tsettattr()函数。原型:
int tcgetattr(int filedes, struct termios *termptr);
int tcgetattr(int filedes, int opt, const struct termios * termptr);
tcsetattr的参数opt使我们可以指定在什么时候新的终端属性才起作用。opt可以指定wei下列常数中的一 个:
TCSANOW 更改立即发生。
TCSADRAIN 发送了所有输出后更改才发生。若更改输出参数则应使用此选择项。
TCSAFLUSH 发送了所有输出后更改才发生。更进一步,在更改发生时未读的宋有输入数据都被删除(刷清)
使用如:tcsetattr(fd, TCSANOW, &newtio)
打开串口
f d = open("/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);
open函数中除普通参数外,另有两个参数O_NOCTTY和O_NDELAY。
O_NOCTTY:通知linux系统,这个程序不会成为这个端口的控制终端。
O_NDELAY:通知linux系统不关心DCD信号线所处的状态(端口的另一端是否激活或者停止)
然后,恢复串口的状态为阻塞状态,用于等待串口数据的读入。用fcntl函数:
fcntl(fd, F_SETFEL, 0);
接着, 测试打开的文件描述符是否引用一个终端设备,以进一步确认串口是否正确打开.
isatty(STDIN_FILENO);
串口读写
串口的读写与普通文件的读写是一样的,使用read,write函数。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhanghuiliang/archive/2008/05/21/2467040.aspx
function escape_array($ar)
{
if (is_array ( $ar ))
{
foreach ( $ar as $key => $ar_sub )
{
$ar [$key] = $this->escape_array ( $ar_sub );
}
}
else if (is_string ( $ar ))
{
$ar = @mysql_escape_string ( $ar );
}
return $ar;
}
1.
条件: magic_quotes_gpc=off
写入数据库的字符串未经过任何过滤处理。从数据库读出的字符串也未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: 出现sql语句错误,mysql不能顺利完成sql语句,写入数据库失败。
数据库保存格式:无数据。
输出数据格式:无数据。
说明: 对于未经处理的单引号在写入数据库时会使sql语句发生错误。
2.
条件: magic_quotes_gpc=off
写入数据库的字符串经过函数addlashes()处理。从数据库读出的字符串未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow''''sun (和输入一样)
输出数据格式:snow''''sun (和输入一样)
说明: addslashes()函数将单引号转换为'的转义字符使sql语句成功执行,
但\'并未作为数据存入数据库,数据库保存的是snow'''sun 而并不是我们想象的snowsun
3.
条件: magic_quotes_gpc=on
写入数据库的字符串未经过任何处理。从数据库读出的字符串未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow''''sun (和输入一样)
输出数据格式:snow''''sun (和输入一样)
说明: magic_quotes_gpc=on 将单引号转换为'的转义字符使sql语句成功执行,
但\'并未作为数据入数据库,数据库保存的是snow'''sun而并不是我们想象的snowsun。
4.
条件: magic_quotes_gpc=on
写入数据库的字符串经过函数addlashes()处理。从数据库读出的字符串未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snowsun (添加了转义字符)
输出数据格式:snowsun (添加了转义字符)
说明: magic_quotes_gpc=on 将单引号转换为的转义字符使sql语句成功执行,
addslashes又将即将写入数据库的单引号转换为,后者的转换被作为数据写入
数据库,数据库保存的是snowsun
总结如下:
1. 对于magic_quotes_gpc=on的情况,
我们可以不对输入和输出数据库的字符串数据作
addslashes()和stripslashes()的操作,数据也会正常显示。
如果此时你对输入的数据作了addslashes()处理,
那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
2. 对于magic_quotes_gpc=off 的情况
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。
补充:
magic_quotes_gpc 作用范围是:WEB客户服务端;作用时间:请求开始时,例如当脚本运行时.
magic_quotes_runtime 作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;作用时间:每次当脚本访问运行状态中产生的数据
条件: magic_quotes_gpc=off
写入数据库的字符串未经过任何过滤处理。从数据库读出的字符串也未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: 出现sql语句错误,mysql不能顺利完成sql语句,写入数据库失败。
数据库保存格式:无数据。
输出数据格式:无数据。
说明: 对于未经处理的单引号在写入数据库时会使sql语句发生错误。
2.
条件: magic_quotes_gpc=off
写入数据库的字符串经过函数addlashes()处理。从数据库读出的字符串未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow''''sun (和输入一样)
输出数据格式:snow''''sun (和输入一样)
说明: addslashes()函数将单引号转换为'的转义字符使sql语句成功执行,
但\'并未作为数据存入数据库,数据库保存的是snow'''sun 而并不是我们想象的snowsun
3.
条件: magic_quotes_gpc=on
写入数据库的字符串未经过任何处理。从数据库读出的字符串未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow''''sun (和输入一样)
输出数据格式:snow''''sun (和输入一样)
说明: magic_quotes_gpc=on 将单引号转换为'的转义字符使sql语句成功执行,
但\'并未作为数据入数据库,数据库保存的是snow'''sun而并不是我们想象的snowsun。
4.
条件: magic_quotes_gpc=on
写入数据库的字符串经过函数addlashes()处理。从数据库读出的字符串未作任何处理。
数据: $data="snow''''sun" ; (snow和sun之间是四个连续的单引号).
操作: 将字符串:"snow''''sun" 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snowsun (添加了转义字符)
输出数据格式:snowsun (添加了转义字符)
说明: magic_quotes_gpc=on 将单引号转换为的转义字符使sql语句成功执行,
addslashes又将即将写入数据库的单引号转换为,后者的转换被作为数据写入
数据库,数据库保存的是snowsun
总结如下:
1. 对于magic_quotes_gpc=on的情况,
我们可以不对输入和输出数据库的字符串数据作
addslashes()和stripslashes()的操作,数据也会正常显示。
如果此时你对输入的数据作了addslashes()处理,
那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
2. 对于magic_quotes_gpc=off 的情况
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。
补充:
magic_quotes_gpc 作用范围是:WEB客户服务端;作用时间:请求开始时,例如当脚本运行时.
magic_quotes_runtime 作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;作用时间:每次当脚本访问运行状态中产生的数据
获取网卡名称:
代码:
<?php
/**
获取机器网卡的物理(MAC)地址
wwa $Exp
**/
class GetMacAddr
{
var $return_array = array(); // 返回带有MAC地址的字串数组
var $mac_addr;
function GetMacAddr($os_type)
{
switch ( strtolower($os_type) )
{
case "linux":
$this->forLinux();
break;
case "solaris":
break;
case "unix":
break;
case "aix":
break;
default:
$this->forWindows();
break;
}
$temp_array = array();
foreach ( $this->return_array as $value )
{
if ( preg_match( "/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i", $value, $temp_array ) )
{
$this->mac_addr = $temp_array[0];
break;
}
}
unset($temp_array);
return $this->mac_addr;
}
function forWindows()
{
@exec("ipconfig /all", $this->return_array);
if ( $this->return_array )
return $this->return_array;
else{
$ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe";
if ( is_file($ipconfig) )
@exec($ipconfig." /all", $this->return_array);
else
@exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $this->return_array);
return $this->return_array;
}
}
function forLinux()
{
@exec("ifconfig -a", $this->return_array);
return $this->return_array;
}
}
?>
<?php
$mac = new GetMacAddr(PHP_OS);
echo $mac->mac_addr;
?>
代码:
<?php
/**
获取机器网卡的物理(MAC)地址
wwa $Exp
**/
class GetMacAddr
{
var $return_array = array(); // 返回带有MAC地址的字串数组
var $mac_addr;
function GetMacAddr($os_type)
{
switch ( strtolower($os_type) )
{
case "linux":
$this->forLinux();
break;
case "solaris":
break;
case "unix":
break;
case "aix":
break;
default:
$this->forWindows();
break;
}
$temp_array = array();
foreach ( $this->return_array as $value )
{
if ( preg_match( "/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i", $value, $temp_array ) )
{
$this->mac_addr = $temp_array[0];
break;
}
}
unset($temp_array);
return $this->mac_addr;
}
function forWindows()
{
@exec("ipconfig /all", $this->return_array);
if ( $this->return_array )
return $this->return_array;
else{
$ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe";
if ( is_file($ipconfig) )
@exec($ipconfig." /all", $this->return_array);
else
@exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $this->return_array);
return $this->return_array;
}
}
function forLinux()
{
@exec("ifconfig -a", $this->return_array);
return $this->return_array;
}
}
?>
<?php
$mac = new GetMacAddr(PHP_OS);
echo $mac->mac_addr;
?>
来源:http://blog.21ic.com/user1/2613/archives/2008/48341.html
这个是单个,先弄懂,然后再弄懂多个,在该链接下面有少量的介绍
Asynchronous Input 异步输入模式
#i nclude <termios.h>
#i nclude <stdio.h>
#i nclude <unistd.h>
#i nclude <fcntl.h>
#i nclude <sys/signal.h>
#i nclude <sys/types.h>
#define BAUDRATE B38400
#define MODEMDEVICE "/dev/ttyS1"
#define _POSIX_SOURCE 1 /* POSIX compliant source */
#define FALSE 0
#define TRUE 1
volatile int STOP=FALSE;
void signal_handler_IO (int status); /* definition of signal handler */
// 定义信号处理程序
int wait_flag=TRUE; /* TRUE while no signal received */
// TRUE 代表没有受到信号,正在等待中
main() {
int fd,c, res;
struct termios oldtio,newtio;
struct sigaction saio;
/* definition of signal action */
// 定义信号处理的结构
char buf[255];
/* open the device to be non-blocking (read will return immediatly) */
// 是用非阻塞模式打开设备 read 函数立刻返回,不会阻塞
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd <0) {perror(MODEMDEVICE); exit(-1); }
/* install the signal handler before making the device asynchronous */
// 在进行设备异步传输前,安装信号处理程序
saio.sa_handler = signal_handler_IO;
saio.sa_mask = 0;
saio.sa_flags = 0;
saio.sa_restorer = NULL;
sigaction(SIGIO,&saio,NULL);
/* allow the process to receive SIGIO */
// 允许进程接收 SIGIO 信号
fcntl(fd, F_SETOWN, getpid());
/* Make the file descriptor asynchronous (the manual page says only
O_APPEND and O_NONBLOCK, will work with F_SETFL...) */
// 设置串口的文件描述符为异步,man上说,只有 O_APPEND 和 O_NONBLOCK 才能使用F_SETFL
fcntl(fd, F_SETFL, FASYNC);
tcgetattr(fd,&oldtio); /* save current port settings */
/* set new port settings for canonical input processing */
// 设置新的串口为标准输入模式
newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR | ICRNL;
newtio.c_oflag = 0;
newtio.c_lflag = ICANON;
newtio.c_cc[VMIN]=1;
newtio.c_cc[VTIME]=0;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
/* loop while waiting for input. normally we would do something
useful here 循环等待输入,通常我们会在这里做些其它的事情 */
while (STOP==FALSE) {
printf(".\n");usleep(100000);
/* after receiving SIGIO, wait_flag = FALSE, input is availableand can be read */
// 在收到 SIGIO 信号后,wait_flag = FALSE, 表示有输入进来,可以读取了
if (wait_flag==FALSE) {
res = read(fd,buf,255);
buf[res]=0;
printf(":%s:%d\n", buf, res);
if (res==1) STOP=TRUE; /* stop loop if only a CR was input */
wait_flag = TRUE; /* wait for new input 等待新的输入*/
}
}
/* restore old port settings */
tcsetattr(fd,TCSANOW,&oldtio);
}
/***************************************************************************
* signal handler. sets wait_flag to FALSE, to indicate above loop that *
* characters have been received. *
***************************************************************************/
// 信号处理函数,设置 wait_flag 为 FALSE, 以告知上面的循环函数串口收到字符了
void signal_handler_IO (int status) {
printf("received SIGIO signal.\n");
wait_flag = FALSE;
}
这个是单个,先弄懂,然后再弄懂多个,在该链接下面有少量的介绍
Asynchronous Input 异步输入模式
#i nclude <termios.h>
#i nclude <stdio.h>
#i nclude <unistd.h>
#i nclude <fcntl.h>
#i nclude <sys/signal.h>
#i nclude <sys/types.h>
#define BAUDRATE B38400
#define MODEMDEVICE "/dev/ttyS1"
#define _POSIX_SOURCE 1 /* POSIX compliant source */
#define FALSE 0
#define TRUE 1
volatile int STOP=FALSE;
void signal_handler_IO (int status); /* definition of signal handler */
// 定义信号处理程序
int wait_flag=TRUE; /* TRUE while no signal received */
// TRUE 代表没有受到信号,正在等待中
main() {
int fd,c, res;
struct termios oldtio,newtio;
struct sigaction saio;
/* definition of signal action */
// 定义信号处理的结构
char buf[255];
/* open the device to be non-blocking (read will return immediatly) */
// 是用非阻塞模式打开设备 read 函数立刻返回,不会阻塞
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd <0) {perror(MODEMDEVICE); exit(-1); }
/* install the signal handler before making the device asynchronous */
// 在进行设备异步传输前,安装信号处理程序
saio.sa_handler = signal_handler_IO;
saio.sa_mask = 0;
saio.sa_flags = 0;
saio.sa_restorer = NULL;
sigaction(SIGIO,&saio,NULL);
/* allow the process to receive SIGIO */
// 允许进程接收 SIGIO 信号
fcntl(fd, F_SETOWN, getpid());
/* Make the file descriptor asynchronous (the manual page says only
O_APPEND and O_NONBLOCK, will work with F_SETFL...) */
// 设置串口的文件描述符为异步,man上说,只有 O_APPEND 和 O_NONBLOCK 才能使用F_SETFL
fcntl(fd, F_SETFL, FASYNC);
tcgetattr(fd,&oldtio); /* save current port settings */
/* set new port settings for canonical input processing */
// 设置新的串口为标准输入模式
newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR | ICRNL;
newtio.c_oflag = 0;
newtio.c_lflag = ICANON;
newtio.c_cc[VMIN]=1;
newtio.c_cc[VTIME]=0;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
/* loop while waiting for input. normally we would do something
useful here 循环等待输入,通常我们会在这里做些其它的事情 */
while (STOP==FALSE) {
printf(".\n");usleep(100000);
/* after receiving SIGIO, wait_flag = FALSE, input is availableand can be read */
// 在收到 SIGIO 信号后,wait_flag = FALSE, 表示有输入进来,可以读取了
if (wait_flag==FALSE) {
res = read(fd,buf,255);
buf[res]=0;
printf(":%s:%d\n", buf, res);
if (res==1) STOP=TRUE; /* stop loop if only a CR was input */
wait_flag = TRUE; /* wait for new input 等待新的输入*/
}
}
/* restore old port settings */
tcsetattr(fd,TCSANOW,&oldtio);
}
/***************************************************************************
* signal handler. sets wait_flag to FALSE, to indicate above loop that *
* characters have been received. *
***************************************************************************/
// 信号处理函数,设置 wait_flag 为 FALSE, 以告知上面的循环函数串口收到字符了
void signal_handler_IO (int status) {
printf("received SIGIO signal.\n");
wait_flag = FALSE;
}
nslookup查看mx记录:
nslookup -query=mx cntv.cn
Server: 114.114.114.114
Address: 114.114.114.114#53
Non-authoritative answer:
cntv.cn mail exchanger = 10 mxcom.263xmail.com.
cntv.cn mail exchanger = 5 mxwcom.263xmail.com.
------------------------------------------------------------------------------------
nslookup -query=mx "smtp.staff.cntv.cn"
Server: 114.114.114.114
Address: 114.114.114.114#53
Non-authoritative answer:
smtp.staff.cntv.cn canonical name = smtpcom.263xmail.com.
Authoritative answers can be found from:
263xmail.com
origin = ns.capital-online.com.cn
mail addr = root.ns.capital-online.com.cn
serial = 28436
refresh = 1800
retry = 300
expire = 604800
minimum = 86400
________________________________________________
Linux windows 通用:
nslookup
set q=mx
163.com
windows下:
nslookup -qmx "163.com"
_______________________________________________
nslookup -query=mx "163.com"
Server: 114.114.114.114
Address: 114.114.114.114#53
Non-authoritative answer:
163.com mail exchanger = 50 163mx00.mxmail.netease.com.
163.com mail exchanger = 10 163mx02.mxmail.netease.com.
163.com mail exchanger = 10 163mx01.mxmail.netease.com.
163.com mail exchanger = 10 163mx03.mxmail.netease.com.
可以看到163.com的MX记录为mx.mail.163.split.netease.com,并且将列出该MX记录对应的IP。
如果该命令没有返回正确的MX记录或者IP,则有可能是您的网络问题或DNS配置错误造成无法向网易邮箱发信,请先联系您的DNS管理员进行解决。
nslookup -query=mx cntv.cn
Server: 114.114.114.114
Address: 114.114.114.114#53
Non-authoritative answer:
cntv.cn mail exchanger = 10 mxcom.263xmail.com.
cntv.cn mail exchanger = 5 mxwcom.263xmail.com.
------------------------------------------------------------------------------------
nslookup -query=mx "smtp.staff.cntv.cn"
Server: 114.114.114.114
Address: 114.114.114.114#53
Non-authoritative answer:
smtp.staff.cntv.cn canonical name = smtpcom.263xmail.com.
Authoritative answers can be found from:
263xmail.com
origin = ns.capital-online.com.cn
mail addr = root.ns.capital-online.com.cn
serial = 28436
refresh = 1800
retry = 300
expire = 604800
minimum = 86400
________________________________________________
Linux windows 通用:
nslookup
set q=mx
163.com
windows下:
nslookup -qmx "163.com"
_______________________________________________
nslookup -query=mx "163.com"
Server: 114.114.114.114
Address: 114.114.114.114#53
Non-authoritative answer:
163.com mail exchanger = 50 163mx00.mxmail.netease.com.
163.com mail exchanger = 10 163mx02.mxmail.netease.com.
163.com mail exchanger = 10 163mx01.mxmail.netease.com.
163.com mail exchanger = 10 163mx03.mxmail.netease.com.
可以看到163.com的MX记录为mx.mail.163.split.netease.com,并且将列出该MX记录对应的IP。
如果该命令没有返回正确的MX记录或者IP,则有可能是您的网络问题或DNS配置错误造成无法向网易邮箱发信,请先联系您的DNS管理员进行解决。
把2个串口用交叉线连起来,假设两个串口分别为/dev/ttyS0和/dev/ttyS1,则能直接在一个shell执行cat /dev/ttyS0,然后在另外一个shell 执行echo "test." >/dev/ttyS1,如果两个串口都是好的,则执行cat /dev/ttyS0会输出’test."如果不行,则可用cat /proc/interrupts看一下是否产生了中断,也可用setserial查看串口设置。
编者按:2009年是计算机专业考研专业基础课首次实行全国统考,面对今年的改变,想报考计算机专业的考生可能对复习的准备有很多的疑问。为了帮助考生正确的做好准备工作,学赛网研究生院特访问了我国著名的计算机教育专家、湖南师范大学计算机软件与理论/计算机应用技术硕士点专业课试题命题人张友生博士,请张博士对考试大纲进行全面的解析。本文为大纲解析的第四篇:计算机网络知识点分析。
从 2009年起,计算机专业考研实行计算机学科专业基础综合课全国统考,考试内容涵盖数据结构、计算机组成原理、操作系统和计算机网络等学科专业基础课程。试卷内容的结构是:数据结构45分(占30%),计算机组成原理45分(占30%),操作系统35分(占23%),计算机网络25分(占17%)。计算机网络部分分值也占有不小的份额,要求考生以平等的心态去对待。阅读全文
从 2009年起,计算机专业考研实行计算机学科专业基础综合课全国统考,考试内容涵盖数据结构、计算机组成原理、操作系统和计算机网络等学科专业基础课程。试卷内容的结构是:数据结构45分(占30%),计算机组成原理45分(占30%),操作系统35分(占23%),计算机网络25分(占17%)。计算机网络部分分值也占有不小的份额,要求考生以平等的心态去对待。阅读全文