Archive for May, 2007

php4、php5版本while语句处理字符串’0′时的差异

Wednesday, May 30th, 2007

php版本while语句处理字符串’0′时的差异

最新碰到一个诡异问题,某些主机上的php4会把字符串’xkai200′处理成’xkai20′,但是在我的php5上显示正常。怀疑是php4和5两个版本在substr或strlen函数处理上的差异,但是仔细翻阅手册并没有发现两个版本的差别。于是怀疑while语句:

< ?php
$str = 'xkai200';
//$str = 'xkai20a';
convert($str);

function convert($str) {
while($str) {
$i++;
$str = substr($str, 1, strlen($str));
echo "<li>$str \t $i</li>\n";
}
}
echo PHP_VERSION;
?>

将’xkai20a’代替’xkai200′,发现原来while条件中如果是字符串’0′,会被当成false对待!

php4.4.2, php4.4.7上发现此问题,php5.5.2则正常。

解决方法:使用while($str != ‘’) 代替 while($str)。

笔记本电脑上常用的几个内核模块

Tuesday, May 22nd, 2007

标题:笔记本电脑上常用的几个内核模块
作者:windrose
来源:http://www.linuxsir.org/bbs/showthread.php?t=194374

笔记本电脑由于节省电力的需要,在设计上对于电源管理非常重视。以前常用的apm是通过bios进行电源管理,而新式的acpi作为apm的后继者,把电源管理的任务交给了操作系统。

以往大家常常会认为笔记本电脑的节能功能在linux中不如在windows中的,但我最近在dell inspiron 700m上安装linux之后,发现其实linux对于acpi的支持已经非常完善了,对于intel处理器的speedstep模式的支持也很好,能做到动态调整cpu的频率。这里介绍一下在2.6.10内核中,我用到的与电源管理和显示系统状态有关的几个内核模块:

  1. AC
    用法: /sbin/modprobe ac
    用途:这个模块很简单,就是显示外接交流电源连接的状态。加载这个模块后,在 /proc/acpi/中会新建 ac_adapter/ADPx/目录,其中的state文件内容即是电源连接状态。
  2. BATTERY
    用法: /sbin/modprobe battery
    用途:监视电池充放电状态、当前容量等。加载模块后,在/proc/acpi/中建立 battery/BATx/目录,其中的文件内容记录了电池的信息(info文件)、状态(state文件)等。
  3. THERMAL
    用法: /sbin/modprobe thermal
    用途: 监视CPU和主板等的温度。加载后,/proc/acpi/目录中建立thermal_zone/THRx/目录,其中的temperature文件中记录了温度值,还有其他的文件定义了在某个温度值系统应该采取的行动等信息。
  4. BUTTON
    用法: /sbin/modprobe button
    用途:定义不同按钮对应的系统行为,例如,可以设置按电源键系统关机、合上屏幕系统休眠等。可以指定在这些键的状态发生变化时执行相应的系统命令,具体内容可以参照 /etc/acpi/目录中的脚本,这里就不展开讲了。
  5. PROCESSOR
    用法: /sbin/modprobe processor
    用途:显示CPU的信息、状态,并能设置对CPU限速(throttling)。在/proc/acpi/processor/CPUx/目录中的文件有cpu 的信息,也定义了在不同电源供应情况下对应的cpu状态以及对cpu限速的规则。假如cpu支持频率调节,则可以通过一些软件利用有关文件实现这一功能。
  6. cpufreq
    用法: 在 /lib/modules/`uname -r`/kernel/arch/i386/kernel/cpu/cpufreq/目录中有许多针对不同移动CPU进行频率调节的模块,需要根据你的 CPU进行选择,有针对intel的speedstep的,也有针对amd的powernow的,还有针对transmeta的longrun的。我的是迅驰dothan 1.6G,所以我加载 speedstep-centrino 模块: /sbin/modprobe speedstep-centrino,加载之后 /sys/devices/system/cpu/cpu0/cpufreq/里面的文件就是与频率调节有关的。

加载了上述模块之后要通过一些软件才能更方便地监视系统状态和使用模块提供的功能,gkrellm有很多有关的插件,windowmaker也有很多dockapps实现同样的功能。我就是用的dockapps。