易截截图软件、单文件、免安装、纯绿色、仅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 pppoe

手头有个ep9315的板,今天突然想起跑一下adsl上网。晚上回来就开始搞。
从10点到现在,终于能够跑起来。
给大家借鉴一下。
1.编译内核,把ppp的那些选项选上。 (我用2.6.8.1的kernel,cirrus 的patch)
2.libpcap-0.9.1 这个包是pppd需要的。
./configure CC=arm-linux-gcc CFLAGS=-msoft-float --target=arm-linu ......

LINUX使用记录

-------------------------------------------------------------------------------------------------------
By:yuyongbao
QQ:673360056
1、  linux下共享文件。安装smbserver。然后在《系统设置》中打开《服务器设置》的《smb server》服务器,输入相关路径即可。然后在window中,使用网络邻居查找linux。(注 ......

linux内核结构体

 -------------------------------------------------------------------------------------------------------
//By:yuyongbao
//QQ:673360056
LINUX 内核结构体
struct attribute
{
    const char    * name;
    struct module     &nb ......

linux find 命令实例

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