易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux源码中的mktime算法解析

  我们知道,从CMOS中读出来的系统时间并不是time_t类型,而是类似于struct tm那样,年月日时分秒是分开存储的。
    那么,要把它转化为系统便于处理的time_t类型,就需要算法进行转换。
    我们都知道我们的公历还是比较复杂的,有大月小月,有闰年非闰年,处理起来会很麻烦。
    但是Linux的源代码仅仅用了短短的几行就完成了这个复杂的转换(Gauss算法),实在令人惊奇。话不多说,先看源代码:
include/linux/time.h

static
inline
unsigned
long
mktime
(
unsigned
int
year,
unsigned
int
mon,
    unsigned
int
day,
unsigned
int
hour,
    unsigned
int
min
,
unsigned
int
sec)
       {
    if
(
0 >
=
(
int
)
(
mon -
=
2)
)
{
/**/
/* 1..12 -> 11,12,1..10 */
         mon +
=
12;
/**/
/* Puts Feb last since it has leap day */
         year -
=
1;
    }
    return
(
(
(
             (
unsigned
long
)
(
year/
4 -
year/
100 +
year/
400 +
367*
mon/
12 +
day)
+
             year*
365 -
719499
          )
*
24 +
hour /**/
/* now have hours */
       )
*
60 +
min
/**/
/* now have minutes */
    )
*
60 +
sec;
/**/
/* finally seconds */
}
看上去令人眼花缭乱,毫无头绪。下面就让我们对该算法作具体的分析。
    先不看前面的,直接看return那句,该式整体上具有这样的结构:
        T = ((X * 24 + hour) * 60 + min) * 60 + sec
    这说明该算法是先算出从1970年1月1日开始的天数X,再进而求出具体的时间值T的。
 


相关文档:

linux 系统源码安装 mysql 、fedora10 mysql5

操作系统 Fedora 10
mysql安装包 mysql-5.0.85.tar.gz
1、创建mysql用户组和用户名
# groupadd mysqlGroup
  (创建组)
# useradd -g mysqlGroup mysqlUser 
(创建一帐号)
2、解压安装包 ,当前目录为 /home/hust/down/mysql/
# tar -xvzf mysql-5.0.85.tar.gz 
      ......

Linux执行以及虚拟内存之用

Linux Execution and Virtual Memory Utilization 
Linux执行以及虚拟内存之用
When Linux boots, it starts with the MMU disabled, so initially it deals only with physical 
memory. The kernel image is copied to physical address 0x8000 in DRAM and executed. First a master page table is created ......

Linux下用Busy Box制作Ramdisk全过程

  -------------------------------------------------------------------------------------------------------
//By:yuyongbao
//QQ:673360056
Linux下用Busy Box制作Ramdisk全过程
1 建立根文件系统结构
#mkdir rootfs
#cd rootfs
#mkdir bin dev etc lib proc sbin tmp usr var
#chmod 1777 tmp
#mk ......

linux find 命令实例

·find  path  -option  [  -print ]  [ -exec  -ok  command ]  {} \;
#-print 将查找到的文件输出到标准输出
#-exec  command  {} \;     -----将查到的文件执行command操作,{} 和 \;之间有空格
#-ok 和-exec相同,只不过在操作前要询 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号