理论上应该在/usr/local/etc/里,看见php.ini-dist和php.ini-recommend了,复制成php.ini,通过查看包对应的文件位置:
testsina# pkg_info -L php5-5.2.6_2|grep php.ini
/usr/local/etc/php.ini-dist
/usr/local/etc/php.ini-recommended
/usr/local/include/php/main/php_ini.h
/usr/local/etc/php.ini-dist
/usr/local/etc/php.ini-recommended
/usr/local/include/php/main/php_ini.h
转: http://blog.ednchina.com/cheungman/34818/message.aspx
这个项目是我在S3C44B0上跑裸机(就是说不加操作系统,把S3C44B0当成超级单片机使用),通过驱动DS18B20采集温度数据并通过超级终端把温度显示出来。本人是把单片机下DS18B20驱动程序移植到S3C44B0来的,所以要特别注意时序问题,主要是注意S3C44B0的主频设置问题,我在程序设置了S3C44B0的主频为20MHz。
这个项目的成功,是我学习ARM以来的一个伟大飞跃,我在QQ空间上写了一个日记,标榜为历史性的一天,可见其意义,此次成功,学习ARM我有了极大兴趣跟动力,算得上是踏进嵌入式的门槛,这也为我后来在uClinux下编写DS1820的驱动打下了基础。
下载:DownLoad
后记:学习ARM,需要良好的单片机基础,这是一定的。
s3c2410的ds18b20驱动(基于linux-2.6.24.4内核)
http://blog.chinaunix.net/u1/57747/showart_1077782.html
ds18b20温度控制器
http://linrongwu.teeta.com/blog/data/131137.html
基于ARM的DS18B20的驱动程序
http://hi.baidu.com/%CA%F7%B4%FC%D0%DC%B5%C4%B4%F3%E8%F1%CA%F7/blog/item/df2d1709dee2ac84d1581bdc.html
这个项目是我在S3C44B0上跑裸机(就是说不加操作系统,把S3C44B0当成超级单片机使用),通过驱动DS18B20采集温度数据并通过超级终端把温度显示出来。本人是把单片机下DS18B20驱动程序移植到S3C44B0来的,所以要特别注意时序问题,主要是注意S3C44B0的主频设置问题,我在程序设置了S3C44B0的主频为20MHz。
这个项目的成功,是我学习ARM以来的一个伟大飞跃,我在QQ空间上写了一个日记,标榜为历史性的一天,可见其意义,此次成功,学习ARM我有了极大兴趣跟动力,算得上是踏进嵌入式的门槛,这也为我后来在uClinux下编写DS1820的驱动打下了基础。
下载:DownLoad
后记:学习ARM,需要良好的单片机基础,这是一定的。
s3c2410的ds18b20驱动(基于linux-2.6.24.4内核)
http://blog.chinaunix.net/u1/57747/showart_1077782.html
ds18b20温度控制器
http://linrongwu.teeta.com/blog/data/131137.html
基于ARM的DS18B20的驱动程序
http://hi.baidu.com/%CA%F7%B4%FC%D0%DC%B5%C4%B4%F3%E8%F1%CA%F7/blog/item/df2d1709dee2ac84d1581bdc.html
make search name=wget
找到wget的port目录,cd到那个目录:
tip:
第一次装时贪心都选了,结果被告知:
===> wget-1.11.2 GNUTLS and OPENSSL are mutually exclusive, enable at most one of them.
*** Error code 1
两者只能选其一,这时可以删除配置文件再重新安装就可以更改选项了:
// end
testsina# whereis wget
wget: /usr/local/bin/wget /usr/local/man/man1/wget.1.gz /usr/ports/ftp/wget
说明安装成功,su 到普通用户wget即可!一般来说已经添加到PATH变量了,如没有将/usr/local/bin/添加到环境变量PATH中即可!
后来发现更简单快捷的查找ports的方法:whereis wget
反安装:
===> wget-1.11.2_1 is already installed
You may wish to ``make deinstall'' and install this port again
by ``make reinstall'' to upgrade it properly.
If you really wish to overwrite the old port of ftp/wget
without deleting it first, set the variable "FORCE_PKG_REGISTER"
in your environment or the "make install" command line.
在 Redhat/Fedora 是预设安装好 wget,而 FreeBSD 则预设没有安装,要在文本模式下载文件很不便。在 FreeBSD 要安装 wget 很容易,只要使用 ports 就行了,方法如下:
cd /usr/ports/ftp/wget
make install clean
那么系统就会自动替你完成安装了。
或者使用命令
pkg_add -r wget就可以把wget安装上去了
找到wget的port目录,cd到那个目录:
# make install clean;rehash
tip:
第一次装时贪心都选了,结果被告知:
===> wget-1.11.2 GNUTLS and OPENSSL are mutually exclusive, enable at most one of them.
*** Error code 1
两者只能选其一,这时可以删除配置文件再重新安装就可以更改选项了:
# make rmconfig
# make&make install
或者:make install clean;rehash// end
testsina# whereis wget
wget: /usr/local/bin/wget /usr/local/man/man1/wget.1.gz /usr/ports/ftp/wget
说明安装成功,su 到普通用户wget即可!一般来说已经添加到PATH变量了,如没有将/usr/local/bin/添加到环境变量PATH中即可!
后来发现更简单快捷的查找ports的方法:whereis wget
反安装:
===> wget-1.11.2_1 is already installed
You may wish to ``make deinstall'' and install this port again
by ``make reinstall'' to upgrade it properly.
If you really wish to overwrite the old port of ftp/wget
without deleting it first, set the variable "FORCE_PKG_REGISTER"
in your environment or the "make install" command line.
在 Redhat/Fedora 是预设安装好 wget,而 FreeBSD 则预设没有安装,要在文本模式下载文件很不便。在 FreeBSD 要安装 wget 很容易,只要使用 ports 就行了,方法如下:
cd /usr/ports/ftp/wget
make install clean
那么系统就会自动替你完成安装了。
或者使用命令
pkg_add -r wget就可以把wget安装上去了
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.