获取网卡名称:
代码:
<?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%)。计算机网络部分分值也占有不小的份额,要求考生以平等的心态去对待。

http://linuxdesktop.cn/2007/04/13/use-wine-ies4linux-to-install-ie6.html
suse11.2:
哈哈,原来我的mandrake10自动就可以识别这个设备,不用另外的驱动程序,估计2.6的内核都应该没问题:
首先把usb转串口线插上然后用dmesg | grep usb查找如果看到:
“drivers/usb/serial/usb-serial.c: USB Serial support registered for Generic”
就说明设备已被识别,然后往下看
drivers/usb/serial/usb-serial.c: USB Serial support registered for PL-2303
usb 2-2: PL-2303 converter now attached to ttyUSB0 (or usb/tts/0 for devfs)
说明我的usb转串口芯片是PL-2303,对应系统设备是 dev/usb/tts/0,最后只需在minicom配置文件里将端口改成/dev/usb/tts/0就可以使用了:)
在Windows下可以使用超级终端来连接交换机和路由器等工业设备,而且在Windows下使用usb转串口的线也有相应的驱动,但是如何在Linux下使用呢?
首先要有一个Linux下的终端软件叫minicom如果没有装这个的朋友可以到自己的源中去下载,然后你就要插上你的usb转串口的线,在Linux下Usb转串口的线几乎不需要驱动,你插上以后在你的dev的目录下应该会有一个ttyUSB0的文件,如果有那么恭喜你了,你的这根线现在是可用的了。进入到终端输入su以root用户进行登录,使用minicom必须要用root用户,然后输入minicom -s 进行设置,进入设置界面以后你会看到有几个选项,分别是:
Filename and Paths, File transfer and protocols, Serial port setup, Modem and dialing, Screen and keyboard, Save setup as df1, Save setup as...... , Exit from minicom
进入Serial port setup
将第一项改成 A—Serial Device : /dev/ttyUSB0
第二项:B—lockfile Location: /var/lock
第五项:E—Bps/par/Bits :57600(这里要注意,这个值要改成你的连接的设备的波特率,我这里的是57600)
第七项:F—Hardware Flow Control: yes
然后退出进入Modem and dialing
将A—initing string B-Rest string K-Hang-up string 这三项的值去掉。
然后退出选择 Save as df1,然后选择EXIT FROM MINICOM 到这里的终端已经设置好了。
接下来你就可以将你的串口线接上设备,然后在终端下输入minicom就可以对设备进行调试了。
/lib/modules/2.6.31.5-0.1-desktop/kernel/drivers/usb/serial/ch341.ko
哈哈,原来我的mandrake10自动就可以识别这个设备,不用另外的驱动程序,估计2.6的内核都应该没问题:
首先把usb转串口线插上然后用dmesg | grep usb查找如果看到:
“drivers/usb/serial/usb-serial.c: USB Serial support registered for Generic”
就说明设备已被识别,然后往下看
drivers/usb/serial/usb-serial.c: USB Serial support registered for PL-2303
usb 2-2: PL-2303 converter now attached to ttyUSB0 (or usb/tts/0 for devfs)
说明我的usb转串口芯片是PL-2303,对应系统设备是 dev/usb/tts/0,最后只需在minicom配置文件里将端口改成/dev/usb/tts/0就可以使用了:)
在Windows下可以使用超级终端来连接交换机和路由器等工业设备,而且在Windows下使用usb转串口的线也有相应的驱动,但是如何在Linux下使用呢?
首先要有一个Linux下的终端软件叫minicom如果没有装这个的朋友可以到自己的源中去下载,然后你就要插上你的usb转串口的线,在Linux下Usb转串口的线几乎不需要驱动,你插上以后在你的dev的目录下应该会有一个ttyUSB0的文件,如果有那么恭喜你了,你的这根线现在是可用的了。进入到终端输入su以root用户进行登录,使用minicom必须要用root用户,然后输入minicom -s 进行设置,进入设置界面以后你会看到有几个选项,分别是:
Filename and Paths, File transfer and protocols, Serial port setup, Modem and dialing, Screen and keyboard, Save setup as df1, Save setup as...... , Exit from minicom
进入Serial port setup
将第一项改成 A—Serial Device : /dev/ttyUSB0
第二项:B—lockfile Location: /var/lock
第五项:E—Bps/par/Bits :57600(这里要注意,这个值要改成你的连接的设备的波特率,我这里的是57600)
第七项:F—Hardware Flow Control: yes
然后退出进入Modem and dialing
将A—initing string B-Rest string K-Hang-up string 这三项的值去掉。
然后退出选择 Save as df1,然后选择EXIT FROM MINICOM 到这里的终端已经设置好了。
接下来你就可以将你的串口线接上设备,然后在终端下输入minicom就可以对设备进行调试了。
从网上查找资料从而得出的,参考资料:
http://www.cnitblog.com/201/archive/2008/01/31/5813.html计算机的串口不能用,怎么与目标板的串口连接呢?
http://www.okeve.com/System/Linux/20071130/31118.htmlLinux系统下使用USB转串口连接工业设备
http://www.oklinux.cn/html/Basic/jyjq/20080317/49447.htmlVMware技巧:在Minicom下启动Linux系统
1、打开Vmware workstation ,单击菜单栏上的VM下的setting,进入virtual machine setting对话框
2、单击add,添加serial port,依此下一步,直到完成为止。
3、连接好开发板,打开linux虚拟机,进入终端输入minicom –s,进入minicom的设置模式。
a) 检查是否存在设备/dev/ttyUSB0,如果没有就建立一个:
mknod /dev/ttyUSB0 c 188 0
选择串口:在选择菜单中的“Serial port setup”,按回车,再按“A”以设置 “Serial Device”/dev/ttyUSB0(注意其中的USB是大写),按回车返回。
b)设置波特率:按“E”键进入设置“bps/par/Bits”(波特率)界面,如果按“I”以设置波特率为115200,按回车返回。 (我使用的是2440的板子)
c)数据流控制:按“F”键设置“Hardware Flow Control”为“NO”.
其它为缺省设置,然后按回车到串口设置主菜单,选择“Save setup as df1”,按回车键保存刚才的设置(保存到“/etc/vminirc.df1”),再选择“Exit”退出设置模式,回到minicom操作模式。此时可像Windows下的超级终端一样使用了。
在最后使用时,XP和linux只能有一个终端可以使用,二者不能同时使用!所以在vmware的状态下,要让linux识别串口的存在,需要重新拔插USB串口!
http://www.cnitblog.com/201/archive/2008/01/31/5813.html计算机的串口不能用,怎么与目标板的串口连接呢?
http://www.okeve.com/System/Linux/20071130/31118.htmlLinux系统下使用USB转串口连接工业设备
http://www.oklinux.cn/html/Basic/jyjq/20080317/49447.htmlVMware技巧:在Minicom下启动Linux系统
1、打开Vmware workstation ,单击菜单栏上的VM下的setting,进入virtual machine setting对话框
2、单击add,添加serial port,依此下一步,直到完成为止。
3、连接好开发板,打开linux虚拟机,进入终端输入minicom –s,进入minicom的设置模式。
a) 检查是否存在设备/dev/ttyUSB0,如果没有就建立一个:
mknod /dev/ttyUSB0 c 188 0
选择串口:在选择菜单中的“Serial port setup”,按回车,再按“A”以设置 “Serial Device”/dev/ttyUSB0(注意其中的USB是大写),按回车返回。
b)设置波特率:按“E”键进入设置“bps/par/Bits”(波特率)界面,如果按“I”以设置波特率为115200,按回车返回。 (我使用的是2440的板子)
c)数据流控制:按“F”键设置“Hardware Flow Control”为“NO”.
其它为缺省设置,然后按回车到串口设置主菜单,选择“Save setup as df1”,按回车键保存刚才的设置(保存到“/etc/vminirc.df1”),再选择“Exit”退出设置模式,回到minicom操作模式。此时可像Windows下的超级终端一样使用了。
在最后使用时,XP和linux只能有一个终端可以使用,二者不能同时使用!所以在vmware的状态下,要让linux识别串口的存在,需要重新拔插USB串口!
生活就时间仍在 是我们飞逝
人犯错误 大半是该用真情时太过动脑筋 而在该用脑筋时又太感情用事
生活就是让弱者感觉无奈 让强者感觉无聊的游戏
喜欢的人不出现, 出现的人不喜欢 是让弱者感觉无奈 让强者感觉无聊的游戏
回忆未来 20:12:12
生活就是让弱者感觉无奈 让强者感觉无聊的游戏 这句我看不懂后面的。
王官文 20:12:52
太强了所以无聊,没有追求了吧
回忆未来 20:14:12
时间仍在 是我们飞逝 这个如何解释
王官文 20:15:57
经常感叹时间飞逝,其实是我们老得快,时间只不过是一个永恒的概念,不管怎么样,时间就是时间,但是你就不是以前的你
人犯错误 大半是该用真情时太过动脑筋 而在该用脑筋时又太感情用事
生活就是让弱者感觉无奈 让强者感觉无聊的游戏
喜欢的人不出现, 出现的人不喜欢 是让弱者感觉无奈 让强者感觉无聊的游戏
回忆未来 20:12:12
生活就是让弱者感觉无奈 让强者感觉无聊的游戏 这句我看不懂后面的。
王官文 20:12:52
太强了所以无聊,没有追求了吧
回忆未来 20:14:12
时间仍在 是我们飞逝 这个如何解释
王官文 20:15:57
经常感叹时间飞逝,其实是我们老得快,时间只不过是一个永恒的概念,不管怎么样,时间就是时间,但是你就不是以前的你
public function getMoreCount($fromuid,$invitetype,$group){
$invArray = explode(',',$invitetype);
foreach($invArray as $key => $value){
$mckey[] = "inv_{$fromuid}_{$group}_{$value}";
}
if (TRUE === $this->getMcHandle())
{
if (FALSE === ($re = $this->newMemHandle->get($mckey)))
{
return false;
}
return $re;
}
return false;
}
$invArray = explode(',',$invitetype);
foreach($invArray as $key => $value){
$mckey[] = "inv_{$fromuid}_{$group}_{$value}";
}
if (TRUE === $this->getMcHandle())
{
if (FALSE === ($re = $this->newMemHandle->get($mckey)))
{
return false;
}
return $re;
}
return false;
}
我想把现有的图像(比如:一个点)从作图区的左边移到右边,怎么实现?
我用过expose_event,通过画点 --> 用矩形填充 --> 再在新的位置画点... ... ,但是这样最终貌似只有最终的效果图(要么是矩形,要么是右侧的点),没有中间的动态过程。
向大家请教~~!
下面是一个画正弦曲线的例子,请教大家如何将画曲线的过程动态的显示出来呢?
代码:
#include
#include
static gint expose_event(GtkWidget *widget, GdkEventExpose *event)
{
int i;
GdkGC *gc;
GdkColormap *colormap;
GdkColor color;
gc=gdk_gc_new(widget->window);
colormap=gtk_widget_get_colormap(widget);
gdk_color_parse("red",&color);
gdk_color_alloc(colormap,&color);
gdk_gc_set_foreground(gc,&color);
/*画正弦曲线*/
for(i=1;i<400;i++)
{
gdk_draw_line(widget->window,gc,i,200+100*sin(6.28*i/400),i+1,200+100*sin(6.28*(i+1)/400));
}
gdk_gc_unref(gc);
return FALSE;
}
int main(int argc,char **argv)
{
GtkWidget *win_main, *draw_area;
gtk_init(&argc,&argv);
win_main=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize(win_main,400,400);
draw_area = gtk_drawing_area_new();
gtk_container_add(GTK_CONTAINER(win_main), draw_area);
gtk_widget_show(draw_area);
gtk_signal_connect(GTK_OBJECT(draw_area), "expose_event",
(GtkSignalFunc) expose_event, NULL);
gtk_signal_connect (GTK_OBJECT (win_main), "destroy",
GTK_SIGNAL_FUNC (gtk_exit), NULL);
gtk_widget_set_events(draw_area, GDK_EXPOSURE_MASK);
gtk_widget_show(win_main);
gtk_main();
return 0;
}
realtang 08-02-03 09:50
This is an event signal, initially emitted when the connected widget becomes fully visible on screen.
Expose events are also generated when a widget has been partially or fully covered by another widget, and is re-exposed.
expose事件只是widget被遮挡后重新出现才发生的或者第一次出现时发生。
在你的这个例子里面,你的这个draw_area在出现在屏幕上以后,才会去调用expose_event函数。
而且事件处理函数都应该是很快执行完的,因为所有的GUI都在一个线程里面,如果像你要求的显示画的过程,那就把其它事件都给阻塞了。
不过你可以采用gtk_widget_queue_draw_area()强制产生expose事件。
另外要补充的,现在的gc就在widget的style对象中,所以不需要new了。
我用过expose_event,通过画点 --> 用矩形填充 --> 再在新的位置画点... ... ,但是这样最终貌似只有最终的效果图(要么是矩形,要么是右侧的点),没有中间的动态过程。
向大家请教~~!
下面是一个画正弦曲线的例子,请教大家如何将画曲线的过程动态的显示出来呢?
代码:
#include
#include
static gint expose_event(GtkWidget *widget, GdkEventExpose *event)
{
int i;
GdkGC *gc;
GdkColormap *colormap;
GdkColor color;
gc=gdk_gc_new(widget->window);
colormap=gtk_widget_get_colormap(widget);
gdk_color_parse("red",&color);
gdk_color_alloc(colormap,&color);
gdk_gc_set_foreground(gc,&color);
/*画正弦曲线*/
for(i=1;i<400;i++)
{
gdk_draw_line(widget->window,gc,i,200+100*sin(6.28*i/400),i+1,200+100*sin(6.28*(i+1)/400));
}
gdk_gc_unref(gc);
return FALSE;
}
int main(int argc,char **argv)
{
GtkWidget *win_main, *draw_area;
gtk_init(&argc,&argv);
win_main=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize(win_main,400,400);
draw_area = gtk_drawing_area_new();
gtk_container_add(GTK_CONTAINER(win_main), draw_area);
gtk_widget_show(draw_area);
gtk_signal_connect(GTK_OBJECT(draw_area), "expose_event",
(GtkSignalFunc) expose_event, NULL);
gtk_signal_connect (GTK_OBJECT (win_main), "destroy",
GTK_SIGNAL_FUNC (gtk_exit), NULL);
gtk_widget_set_events(draw_area, GDK_EXPOSURE_MASK);
gtk_widget_show(win_main);
gtk_main();
return 0;
}
realtang 08-02-03 09:50
This is an event signal, initially emitted when the connected widget becomes fully visible on screen.
Expose events are also generated when a widget has been partially or fully covered by another widget, and is re-exposed.
expose事件只是widget被遮挡后重新出现才发生的或者第一次出现时发生。
在你的这个例子里面,你的这个draw_area在出现在屏幕上以后,才会去调用expose_event函数。
而且事件处理函数都应该是很快执行完的,因为所有的GUI都在一个线程里面,如果像你要求的显示画的过程,那就把其它事件都给阻塞了。
不过你可以采用gtk_widget_queue_draw_area()强制产生expose事件。
另外要补充的,现在的gc就在widget的style对象中,所以不需要new了。
如果要清空memcache的items,常用的办法是什么?杀掉重启?如果有n台memcache需要重启怎么办?挨个做一遍?
很简单,假设memcached运行在本地的11211端口,那么跑一下命令行:
$ echo ”flush_all” | nc localhost 11211
注:flush并不会将items删除,只是将所有的items标记为expired。
也可以这样:
[/usr/local/apache2/*/vhost.d]# telnet 172.25.*.70 12000
Trying 172.25.38.70...
Connected to 172.25.38.70.
Escape character is '^]'.
flush_all
OK
FROM: http://willj.net/blog/2008/06/10/flushing-memcached-servers-the-easy-way/
很简单,假设memcached运行在本地的11211端口,那么跑一下命令行:
$ echo ”flush_all” | nc localhost 11211
注:flush并不会将items删除,只是将所有的items标记为expired。
也可以这样:
[/usr/local/apache2/*/vhost.d]# telnet 172.25.*.70 12000
Trying 172.25.38.70...
Connected to 172.25.38.70.
Escape character is '^]'.
flush_all
OK
FROM: http://willj.net/blog/2008/06/10/flushing-memcached-servers-the-easy-way/
计算机的串口不能用,怎么与目标板的串口连接呢?
windows下可以用USB转串口线实现,在google上搜索了一下,linux下更简单,连驱动都免装!
测试环境:redhat linux fedora core 4
总结如下:
1. 检查是否存在设备/dev/ttyUSB0,如果没有就建立一个:
mknod /dev/ttyUSB0 c 188 0
以下推理未测试:
如果有多个USB口,可以类推,建立/dev/ttyUSB[1-n],注意从设备号要累加,
如:mknod /dev/ttyUSB[1-n] c 188 [1-n]
2. 启动minicom, 设置串口设备为 /dev/ttyUSB0, 再设置波特率/数据位/停止位,保存为缺省配置df1
3. 重启minicom, 复位目标板,看是否有打印信息?
如果没有请确认:a)USB/串口线没问题,b)确认你使用的USB口是第一个(一个个的试吧,一般电脑不会标示出来)
windows下可以用USB转串口线实现,在google上搜索了一下,linux下更简单,连驱动都免装!
测试环境:redhat linux fedora core 4
总结如下:
1. 检查是否存在设备/dev/ttyUSB0,如果没有就建立一个:
mknod /dev/ttyUSB0 c 188 0
以下推理未测试:
如果有多个USB口,可以类推,建立/dev/ttyUSB[1-n],注意从设备号要累加,
如:mknod /dev/ttyUSB[1-n] c 188 [1-n]
2. 启动minicom, 设置串口设备为 /dev/ttyUSB0, 再设置波特率/数据位/停止位,保存为缺省配置df1
3. 重启minicom, 复位目标板,看是否有打印信息?
如果没有请确认:a)USB/串口线没问题,b)确认你使用的USB口是第一个(一个个的试吧,一般电脑不会标示出来)
http://www.douban.com/subject/1314262/
http://www.douban.com/subject/1288844/
http://www.douban.com/subject/1288844/