ajax的基础实例,用于从数据库中检测动态检测用户名是否已经存在(php+mysql,其他只要在test.php程序上改成相应的语言就可以了!)
阅读全文

http://www.souzz.net/html/svg/4/34019.html
http://www.souzz.net/html/svg/4/34019.html
http://okone96.itpub.net/post/9033/226326
http://bbs.xml.org.cn/dispbbs.asp?boardID=21&ID=65234
http://www.souzz.net/html/svg/4/34019.html
http://okone96.itpub.net/post/9033/226326
http://bbs.xml.org.cn/dispbbs.asp?boardID=21&ID=65234
错误:
file_get_contents() failed to open stream: Connection timed out in /data1/www/htdocs/app.space.sina.com.cn/fface/libs/feedsender.class.php
建议加上timeout,而不是让用户无限等待。
当我们遇到文本文件体积很大时,比如超过几十M甚至几百M几G的大文件,用记事本或者其它编辑器打开往往不能成功,因为他们都需要把文件内容全部放到内存里面,这时就会发生内存溢出而打开错误,遇到这种情况我们可以使用PHP的文件读取函数file_get_contents()进行分段读取。
函数说明
string file_get_contents ( string $filename [, bool $use_include_path [, resource $context [, int $offset [, int $maxlen ]]]] )
和 file() 一样,只除了 file_get_contents() 把文件读入一个字符串。将在参数 offset 所指定的位置开始读取长度为 maxlen 的内容。如果失败,file_get_contents() 将返回 FALSE。
file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。
如果针对较小文件只是希望分段读取并以此读完可以使用fread()函数
以上就是如何使用file_get_contents函数读取大文件的方法,超级简单。
file_get_contents() failed to open stream: Connection timed out in /data1/www/htdocs/app.space.sina.com.cn/fface/libs/feedsender.class.php
建议加上timeout,而不是让用户无限等待。
<?php
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 1
)
)
);
file_get_contents("http://example.com/", 0, $ctx);
?>
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 1
)
)
);
file_get_contents("http://example.com/", 0, $ctx);
?>
当我们遇到文本文件体积很大时,比如超过几十M甚至几百M几G的大文件,用记事本或者其它编辑器打开往往不能成功,因为他们都需要把文件内容全部放到内存里面,这时就会发生内存溢出而打开错误,遇到这种情况我们可以使用PHP的文件读取函数file_get_contents()进行分段读取。
函数说明
string file_get_contents ( string $filename [, bool $use_include_path [, resource $context [, int $offset [, int $maxlen ]]]] )
和 file() 一样,只除了 file_get_contents() 把文件读入一个字符串。将在参数 offset 所指定的位置开始读取长度为 maxlen 的内容。如果失败,file_get_contents() 将返回 FALSE。
file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。
如果针对较小文件只是希望分段读取并以此读完可以使用fread()函数
以上就是如何使用file_get_contents函数读取大文件的方法,超级简单。
堆(heap)和栈(stack)有什么区别??
简单的可以理解为:
heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。
stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。
预备知识—程序的内存分配
阅读全文
简单的可以理解为:
heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。
stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。
预备知识—程序的内存分配

#vi /root/sunwaylove.sh
#crontab -e
1-59 * * * * /root/sunwaylove.sh
XXXXX 为你需要守护的进程名称,改脚本最好配合cron来执行,比如每1分钟判断一下进程是否存在不存则自动启动。该方法对僵尸进程不起作用。
僵尸进程:
http://www.bsdlover.cn/html/54/n-1054.html
ps -ax | grep -v grep | grep XXXXXX | cut -c1-6 |\
awk '{print $2}' |
if read pid;
then
echo ${pid}
else
XXXXXX > /dev/null 2>&1
fi
awk '{print $2}' |
if read pid;
then
echo ${pid}
else
XXXXXX > /dev/null 2>&1
fi
#crontab -e
1-59 * * * * /root/sunwaylove.sh
XXXXX 为你需要守护的进程名称,改脚本最好配合cron来执行,比如每1分钟判断一下进程是否存在不存则自动启动。该方法对僵尸进程不起作用。
僵尸进程:
http://www.bsdlover.cn/html/54/n-1054.html
在c语言中实现数组的动态增长
原理:在c语言中数组下标访问可以看成指针偏移访问
1、对表进行检查,看看它是否真的已满
2、如果表确实已满,使用realloc()函数扩展表的长度,
并进行检查,确保realloc()操作成功进行。
3、在表中增加所需要的项目。
代码如下:
如果realloc()函数失败,它会使该指针的值变成NULL,这样就无法
对现有的表进行访问。
原理:在c语言中数组下标访问可以看成指针偏移访问
1、对表进行检查,看看它是否真的已满
2、如果表确实已满,使用realloc()函数扩展表的长度,
并进行检查,确保realloc()操作成功进行。
3、在表中增加所需要的项目。
代码如下:
int current_element=0;
int total_element=128;
char *dynamic=malloc(total_element);
char *ptr;
void add_element(char c)
{
if(current_element==total_element-1)
{
total_element *=2;
ptr=(char*)realloc(dynamic,total_element);
if(ptr==NULL)
{
printf("can't expand the table!\n");
return -1;
}
else
dynamic=ptr;
}
current_element++;
dynamic[current_element]=c;
}
注:在实践中,不要把realloc()函数的返回值直接赋给字符指针,int total_element=128;
char *dynamic=malloc(total_element);
char *ptr;
void add_element(char c)
{
if(current_element==total_element-1)
{
total_element *=2;
ptr=(char*)realloc(dynamic,total_element);
if(ptr==NULL)
{
printf("can't expand the table!\n");
return -1;
}
else
dynamic=ptr;
}
current_element++;
dynamic[current_element]=c;
}
如果realloc()函数失败,它会使该指针的值变成NULL,这样就无法
对现有的表进行访问。
在 ITPub 论坛上,最近有朋友发起了一个"请列出你在从事DBA生涯中,最难以忘怀的一次误操作"话题讨论,如果有足够的耐心看下去的话,会发现很多误操作都是类似的,最上镜的就是这个操作系统级别的 "rm -f" / "rm -rf" 了。
阅读全文

./server: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
解决办法:
ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2
或者安装libevent时指定目录 --prefix=/usr/lib
解决办法:
ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2
或者安装libevent时指定目录 --prefix=/usr/lib
动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如Win32内核就是3个DLL文件构成。这种技术在Linux操作系统下也有对应的实现,就是Linux标准对象Standard Ojbect,对应的文件扩展名为.so。
阅读全文

结构体的定义:
结构体的初始化:
阅读全文
typedef struct
{
char ip[30];
char usb[30];
}xiaoshou_cmd;
{
char ip[30];
char usb[30];
}xiaoshou_cmd;
结构体的初始化:
xiaoshou_cmd *conf,tem;
strcpy(tem.ip,"xiaoshou");
printf("ip= %s\n",tem.ip); strcpy(tem.usb,"xiaoshou");
printf("ip= %s\n",tem.usb);
strcpy(tem.ip,"xiaoshou");
printf("ip= %s\n",tem.ip); strcpy(tem.usb,"xiaoshou");
printf("ip= %s\n",tem.usb);

守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待
处理某些发生的事件。守护进程是一种很有用的进程。
Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。
同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。
守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,
造成不同 Unix环境下守护进程的编程规则并不一致。
需要注意,照搬某些书上的规则(特别是BSD4.3和低版本的System V)到Linux会出现错误的。
下面结合一些前辈的文档和自己的例子说说守护进程的编程。
阅读全文
处理某些发生的事件。守护进程是一种很有用的进程。
Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。
同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。
守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,
造成不同 Unix环境下守护进程的编程规则并不一致。
需要注意,照搬某些书上的规则(特别是BSD4.3和低版本的System V)到Linux会出现错误的。
下面结合一些前辈的文档和自己的例子说说守护进程的编程。

作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了。
在本文中,将给大家介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用“./configure”,“make”,“make instal”就可以把程序安装到Linux系统中去了。这将特别适合想做开放源代码软件的程序开发人员,又或如果你只是自己写些小的Toy程序,那么这个文章对你也会有很大的帮助。
一、Makefile介绍
Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有文件的信息,在make时会决定在链接的时候需要重新编译哪些文件。
Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。
Makefile的基本结构不是很复杂,但当一个程序开发人员开始写Makefile时,经常会怀疑自己写的是否符合惯例,而且自己写的 Makefile经常和自己的开发环境相关联,当系统环境变量或路径发生了变化后,Makefile可能还要跟着修改。这样就造成了手工书写 Makefile的诸多问题,automake恰好能很好地帮助我们解决这些问题。
使用automake,程序开发人员只需要写一些简单的含有预定义宏的文件,由autoconf根据一个宏文件生成configure,由 automake根据另一个宏文件生成Makefile.in,再使用configure依据Makefile.in来生成一个符合惯例的 Makefile。下面我们将详细介绍Makefile的automake生成方法。
阅读全文
在本文中,将给大家介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用“./configure”,“make”,“make instal”就可以把程序安装到Linux系统中去了。这将特别适合想做开放源代码软件的程序开发人员,又或如果你只是自己写些小的Toy程序,那么这个文章对你也会有很大的帮助。
一、Makefile介绍
Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有文件的信息,在make时会决定在链接的时候需要重新编译哪些文件。
Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。
Makefile的基本结构不是很复杂,但当一个程序开发人员开始写Makefile时,经常会怀疑自己写的是否符合惯例,而且自己写的 Makefile经常和自己的开发环境相关联,当系统环境变量或路径发生了变化后,Makefile可能还要跟着修改。这样就造成了手工书写 Makefile的诸多问题,automake恰好能很好地帮助我们解决这些问题。
使用automake,程序开发人员只需要写一些简单的含有预定义宏的文件,由autoconf根据一个宏文件生成configure,由 automake根据另一个宏文件生成Makefile.in,再使用configure依据Makefile.in来生成一个符合惯例的 Makefile。下面我们将详细介绍Makefile的automake生成方法。

1.TTL电平:
输出高电平>2.4V,输出低电平 <0.4V。
在室温下,一般输出高电平是3.5V,输出低电平是0.2V。
最小输入高电平和低电平:输入高电平>=2.0V,输入低电平 <=0.8V,噪声容限是0.4V。
2.CMOS电平:
1逻辑电平电压接近于电源电压,0逻辑电平接近于0V。而且具有很宽的噪声容。
3.rs232电平:
-5v~15v为逻辑电平1,+5~+15符为逻辑电平0.
输出高电平>2.4V,输出低电平 <0.4V。
在室温下,一般输出高电平是3.5V,输出低电平是0.2V。
最小输入高电平和低电平:输入高电平>=2.0V,输入低电平 <=0.8V,噪声容限是0.4V。
2.CMOS电平:
1逻辑电平电压接近于电源电压,0逻辑电平接近于0V。而且具有很宽的噪声容。
3.rs232电平:
-5v~15v为逻辑电平1,+5~+15符为逻辑电平0.
什么是前端总线?不是超频的方法之一,也不是用来超频的。
我们知道,电脑有许多配件,配件不同,速度也就不同。在286、386和早期的486 电脑里,CPU的速度不是太高,和内存保持一样的速度。后来随着CPU速度的飞速提升,内存由于电气结构关系,无法象CPU那样提升很高的速度(就算现在内存达到400、533,但跟CPU的几个G的速度相比,根本就不是一个级别的),于是造成了内存和CPU之间出现了速度差异,这时就提出一个CPU的主频、倍频和外频的概念,外频顾名思义就是CPU外部的频率,也就是内存的频率,CPU以这个频率来与内存联系。CPU的主频就是CPU内部的实际运算速度,主频肯定是比外频高的,高一定的倍数,这个数就是倍频。举个例子,你从电脑垃圾堆里拣到一个被抛弃的INTEL 486 CPU,上面印着486 DX/2 66。这个486的CPU的主频是66MHZ,DX/2代表是2倍频的,于是算出CPU的外频是33MZ,也就是内存的工作频率,这同时也是前端总线 FSB的频率。因为CPU是通过前端总线来与内存发生联系的,所以内存的工作频率(或者说外频也行)就是前端总线的频率。刚才这个垃圾堆里的486 CPU,前端总线的频率就是33MZ。这样的前端总线结构一直延续到486之后的奔腾(俗话说的586)、奔腾2、奔腾3,例如一颗奔3 933MHZ的CPU,外频133,也就是说它的前端总线是133MHZ,内存工作频率也是133。
阅读全文
我们知道,电脑有许多配件,配件不同,速度也就不同。在286、386和早期的486 电脑里,CPU的速度不是太高,和内存保持一样的速度。后来随着CPU速度的飞速提升,内存由于电气结构关系,无法象CPU那样提升很高的速度(就算现在内存达到400、533,但跟CPU的几个G的速度相比,根本就不是一个级别的),于是造成了内存和CPU之间出现了速度差异,这时就提出一个CPU的主频、倍频和外频的概念,外频顾名思义就是CPU外部的频率,也就是内存的频率,CPU以这个频率来与内存联系。CPU的主频就是CPU内部的实际运算速度,主频肯定是比外频高的,高一定的倍数,这个数就是倍频。举个例子,你从电脑垃圾堆里拣到一个被抛弃的INTEL 486 CPU,上面印着486 DX/2 66。这个486的CPU的主频是66MHZ,DX/2代表是2倍频的,于是算出CPU的外频是33MZ,也就是内存的工作频率,这同时也是前端总线 FSB的频率。因为CPU是通过前端总线来与内存发生联系的,所以内存的工作频率(或者说外频也行)就是前端总线的频率。刚才这个垃圾堆里的486 CPU,前端总线的频率就是33MZ。这样的前端总线结构一直延续到486之后的奔腾(俗话说的586)、奔腾2、奔腾3,例如一颗奔3 933MHZ的CPU,外频133,也就是说它的前端总线是133MHZ,内存工作频率也是133。

一、RS-232-C
RS-232C标准(协议)的全称是EIA-RS-232C标准,其中EIA(Electronic Industry Association)代表美国电子工业协会,RS(recommeded standard)代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969),在这之前,有RS232B、RS232A。。它规定连接电缆和机械、电气特性、信号功能及传送过程。常用物理标准还有有EIARS-232-C、EIARS-422-A、 EIARS-423A、EIARS-485。这里只介绍EIARS-232-C(简称232,RS232)。 例如,目前在IBM PC机上的COM1、COM2接口,就是RS-232C接口。
阅读全文
RS-232C标准(协议)的全称是EIA-RS-232C标准,其中EIA(Electronic Industry Association)代表美国电子工业协会,RS(recommeded standard)代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969),在这之前,有RS232B、RS232A。。它规定连接电缆和机械、电气特性、信号功能及传送过程。常用物理标准还有有EIARS-232-C、EIARS-422-A、 EIARS-423A、EIARS-485。这里只介绍EIARS-232-C(简称232,RS232)。 例如,目前在IBM PC机上的COM1、COM2接口,就是RS-232C接口。

预处理程序提供了条件编译的功能。 可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。 这对于程序的移植和调试是很有用的。
条件编译有三种形式,下面分别介绍:
1. 第一种形式:
#ifdef 标识符
程序段1
#else
程序段2
#endif
它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
如果没有程序段2(它为空),本格式中的#else可以没有, 即可以写为:
阅读全文
条件编译有三种形式,下面分别介绍:
1. 第一种形式:
#ifdef 标识符
程序段1
#else
程序段2
#endif
它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
如果没有程序段2(它为空),本格式中的#else可以没有, 即可以写为:
