文档库 最新最全的文档下载
当前位置:文档库 › linux下的时间转换函数

linux下的时间转换函数

linux下的时间转换函数
linux下的时间转换函数

linux下的时间函数

我们在编程中可能会经常用到时间,比如取得系统的时间(获取系统的年、月、日、时、分、秒,星期等),或者是隔一段时间去做某事,那么我们就用到一些时间函数。

linux下存储时间常见的有两种存储方式,一个是从1970年到现在经过了多少秒,一个是用一个结构来分别存储年月日时分秒的。

time_t 这种类型就是用来存储从1970年到现在经过了多少秒,要想更精确一点,可以用结构struct timeval,它精确到微妙。

struct timeval

{

long tv_sec; /*秒*/

long tv_usec; /*微秒*/

};

而直接存储年月日的是一个结构:

struct tm

{

int tm_sec; /*秒,正常范围0-59,但允许至61*/

int tm_min; /*分钟,0-59*/

int tm_hour; /*小时,0-23*/

int tm_mday; /*日,即一个月中的第几天,1-31*/

int tm_mon; /*月,从一月算起,0-11*/

int tm_year; /*年,从1900至今已经多少年*/

int tm_wday; /*星期,一周中的第几天,从星期日算起,0-6*/

int tm_yday; /*从今年1月1日到目前的天数,范围0-365*/

int tm_isdst; /*日光节约时间的旗标*/

};

需要特别注意的是,年份是从1900年起至今多少年,而不是直接存储如2008年,月份从0开始的,0表示一月,星期也是从0开始的,0表示星期日,1表示星期一。

下面介绍一下我们常用的时间函数:

#include

char *asctime(const struct tm* timeptr);

将结构中的信息转换为真实世界的时间,以字符串的形式显示

char *ctime(const time_t *timep);

将timep转换为真是世界的时间,以字符串显示,它和asctime不同就在于传入的参数形式不一样

double difftime(time_t time1, time_t time2);

返回两个时间相差的秒数

int gettimeofday(struct timeval *tv, struct timezone *tz);

返回当前距离1970年的秒数和微妙数,后面的tz是时区,一般不用

struct tm* gmtime(const time_t *timep);

将time_t表示的时间转换为没有经过时区转换的UTC时间,是一个struct tm结构指针

stuct tm* localtime(const time_t *timep);

和gmtime类似,但是它是经过时区转换的时间。

time_t mktime(struct tm* timeptr);

将struct tm结构的时间转换为从1970年至今的秒数

time_t time(time_t *t);

取得从1970年1月1日至今的秒数。

上面是简单的介绍,下面通过实战来看看这些函数的用法:

下载: gettime1.c

1. /*gettime1.c*/

2. #include

3. int main()

4. {

5. time_t timep;

6. time(&timep); /*获取time_t类型的当前时间*/

7. /*用gmtime将time_t类型的时间转换为struct tm类型的时间按,

8. 然后再用asctime转换为我们常见的格式Fri Jan 11 17:25:24 2008

9. */

10. printf("%s", asctime(gmtime(&timep)));

11. return0;

12. }

编译并运行:

$gcc -o gettime1 gettime1.c

$./gettime1

Fri Jan 11 17:04:08 2008

下面是直接把time_t类型的转换为我们常见的格式:

下载: gettime2.c

1. /* gettime

2.c*/

2. #include

3. int main()

4. {

5. time_t timep;

6. time(&timep); /*获取time_t类型当前时间*/

7. /*转换为常见的字符串:Fri Jan 11 17:04:08 2008*/

8. printf("%s", ctime(&timep));

9. return0;

10. }

编译并运行:

$./gettime2

Sat Jan 12 01:25:29 2008

我看了一本书上面说的这两个例子如果先后执行的话,两个的结果除了秒上有差别之外(执行程序需要时间),应该是一样的,可是我这里执行却发现差了很长时间按,一个是周五,一个是周六,后来我用date 命令执行了一遍

$date

六1月12 01:25:19 CST 2008

我发现date和gettime2比较一致,我估计可能gettime1并没有经过时区的转换,它们是有差别的。

下载: gettime3.c

1. /*gettime3.c */

2. #include

3. int main()

4. {

5. char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

6. time_t timep;

7. struct tm *p;

8. time(&timep); /*获得time_t结构的时间,UTC时间*/

9. p = gmtime(&timep); /*转换为struct tm结构的UTC时间*/

10. printf("%d/%d/%d ", 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday)

;

11. printf("%s %d:%d:%d/n", wday[p->tm_wday], p->tm_hour,

12. p->tm_min, p->tm_sec);

13. return0;

14. }

编译并运行:

$./gettime3

2008/1/11 Fri 17:42:54

从这个时间结果上来看,它和gettime1保持一致。

下载: gettime4.c

1. /*gettime4.c*/

2. #include

3. int main()

4. {

5. char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

6. time_t timep;

7. struct tm *p;

8. time(&timep); /*获得time_t结构的时间,UTC时间*/

9. p = localtime(&timep); /*转换为struct tm结构的当地时间*/

10. printf("%d/%d/%d ", 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday)

;

11. printf("%s %d:%d:%d/n", wday[p->tm_wday], p->tm_hour, p->tm_min,

p->tm_sec);

12. return0;

13. }

编译并运行:

$gcc -o gettime4 gettime4.c

$./gettime4

2008/1/12 Sat 1:49:29

从上面的结果我们可以这样说:

time, gmtime, asctime 所表示的时间都是UTC时间,只是数据类型不一样,而localtime, ctime 所表示的时间都是经过时区转换后的时间,它和你用系统命令date 所表示的CST时间应该保持一致。

下载: gettime5.c

1. /*gettime5.c*/

2. #include

3. int main()

4. {

5. time_t timep;

6. struct tm *p;

7. time(&timep); /*当前time_t类型UTC时间*/

8. printf("time():%d/n",timep);

9. p = localtime(&timep); /*转换为本地的tm结构的时间按*/

10. timep = mktime(p); /*重新转换为time_t类型的UTC时间,这里有一个

时区的转换*/

11. printf("time()->localtime()->mktime(): %d/n", timep);

12. return0;

13. }

编译并运行:

$gcc -o gettime5 gettime5.c

$./gettime5

time():13

time()->localtime()->mktime(): 13

这里面把UTC时间按转换为本地时间,然后再把本地时间转换为UTC时间,它们转换的结果保持一致。

下载: gettime6.c

1. /*gettime6.c */

2. #include

3. int main()

4. {

5. time_t timep;

6. struct tm *p;

7. time(&timep); /*得到time_t类型的UTC时间*/

8. printf("time():%d/n",timep);

9. p = gmtime(&timep); /*得到tm结构的UTC时间*/

10. timep = mktime(p); /*转换,这里会有时区的转换*/

11. printf("time()->gmtime()->mktime(): %d/n", timep);

12. return0;

13. }

编译并运行:

$gcc -o gettime6 gettime6.c

$./gettime6

time():92

time()->gmtime()->mktime(): 92

从这里面我们可以看出,转换后时间不一致了,计算一下,整整差了8个小时( (92-92)/3600 = 8 ),说明mktime会把本地时间转换为UTC时间,这里面本来就是UTC时间,于是再弄个时区转换,结果差了8个小时,用的时候应该注意。

函数分类:

1. 设置时间: settimeofday, tzset

2. 获取时间: time, ftime, gettimeofday

3. 时间格式转换: mktime, strftime; gmtime, localtime; asctime, ctime

4. 其他: clock, difftime

asctime: 将时间和日期以字符串格式表示

头文件: time.h

函数定义: char *asctime(const struct tm *timeptr);

说明: asctime()将函数timeptr所指的tm结构中的信息转换成现实世界所使用的时间日期表示方法, 然后将结果以字符串形态返回. 此函数已经由时区转换成当地时间, 返回的字符串格式为: "Wed Jun 30 21:49:08 1993/n"

ctime: 将时间和日期以字符串格式表示

头文件: time.h

函数定义: char *ctime(const time_t *timep);

说明: ctime()同asctime()函数, 只是输入参数为time_t.

应用举例:

#include

#include

int main(void)

{

time_t timep;

time(&timep);

printf("%s", ctime(&timep));

printf("%s", asctime(gmtime(&timep)));

return 0;

}

运行结果:

Sun Dec 14 15:30:11 2008

Sun Dec 14 15:30:11 2008

clock: 取得进程占用CPU的大约时间

头文件: time.h

函数定义: clock_t clock(void);

说明: clock()用来返回进程所占用CPU的大约时间.

difftime: 计算时间差距

头文件: time.h

函数定义: double difftime(time_t time1, time_t time0);

说明: difftime()用来计算参数time1-time0, 结果以double型精确值返回. 两个参数的时间都是以1970年1月1日0时0分0秒算起的UTC时间.

ftime: 取得目前的时间和日期

头文件: sys/timeb.h

函数定义: int ftime(struct timeb *tp);

说明: ftime()将日前时间日期由参数tp所指的结构输出. tp结构定义如下: struct timeb{

/* 为从1970年1月1日至今的秒数*/

time_t time;

/* 为千分之一秒*/

unsigned short millitm;

/* 为目前时区和Greenwich相差的时间, 单位为单位*/

short timezone;

/* 为日光节约时间的修正状态, 若非0为启用日光节约时间的修正*/ short dstflag;

};

无论成功还是失败都返回0.

应用举例:

#include

#include

int main(void)

{

struct timeb tp;

ftime(&tp);

printf("time: %d/n", tp.time);

printf("millitm: %d/n", https://www.wendangku.net/doc/156722147.html,litm);

printf("timezone: %d/n", tp.timezone);

printf("dstflag: %d/n", tp.dstflag);

return 0;

}

运行结果:

time: 08

millitm: 716

timezone: -480

dstflag: 0

gettimeofday: 取得目前的时间

头文件: sys/time.h unist.d

函数定义: int gettimeofday(struct timeval *tv, struct timezone *tz);

说明: gettimeofday()会把目前的时间用tv所指的结构返回, 当地时区的信息则放到tz所指的结构中. 成功则返回0, 失败返回-1, 错误代码存于errno. EFAULT是指针tv和tz所指的内存空间超出存取权限.

timeval结构定义为:

struct timeval{

/* 为从1970年1月1日至今的秒数*/

long tv_sec;

/* 微秒*/

long tv_usec;

};

timezone 结构定义为:

struct timezone{

/* 和Greenwich时间差了多少分钟*/

int tz_minuteswest;

/*日光节约时间的状态*/

int tz_dsttime;

};

上述两个结构都定义在/usr/include/sys/time.h, tz_dsttime所代表的状态如下:DST_NONE /*不使用*/

DST_USA /*美国*/

DST_AUST /*澳洲*/

DST_WET /*西欧*/

DST_MET /*中欧*/

DST_EET /*东欧*/

DST_CAN /*加拿大*/

DST_GB /*大不列颠*/

DST_RUM /*罗马尼亚*/

DST_TUR /*土耳其*/

DST_AUSTALT /*澳洲(1986年以后)*/

gmtime: 将秒数转换目前的时间和日期

头文件: time.h

函数定义: struct tm *gmtime(const time_t *timep);

说明: gmtime()将参数timep所指的time_t结构中的信息转换成现实世界所使用的时间日期表示方法, 然后将结果由结构tm返回. 结构tm的定义为:

struct tm{

int tm_sec;

int tm_min;

int tm_hour;

int tm_mday;

int tm_mon;

int tm_year;

int tm_wday;

int tm_yday;

int tm_isdst;

};

int tm_sec 代表目前秒数, 正常范围为0-59, 但允许至61秒

int tm_min 代表目前分数, 范围0-59

int tm_hour 从午夜算起的时数, 范围为0-23

int tm_mday 目前月份的日数, 范围01-31

int tm_mon 代表目前月份, 从一月算起, 范围从0-11

int tm_year 从1900年算起至今的年数

int tm_wday 一星期的日数, 从星期一算起, 范围为0-6

int tm_yday 从今年1月1日算起至今的天数, 范围为0-365

int tm_isdst 日光节约时间的旗标

此函数返回的时间日期未经时区转换, 是UTC时间.

localtime: 将秒数转换当地目前的时间和日期

头文件: time.h

函数定义: struct *localtime(const time_t *timep);

说明: localtime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的

时间日期表示方法, 然后将结果由结构tm返回. 结构tm的定义请参考gmtime(). 此函数返回的时间日期已经转换成当地时区.

mktime: 将时间结构数据转换成经过的秒数

头文件: time.h

函数定义: time_t mktime(struct tm *timeptr);

说明: mktime()用来将参数timeptr所指的tm结构数据转换成从1970年1月1日0时0分0秒算起至今的UTC时间所经过的秒数. 返回经过的秒数.

settimeofday: 设置目前的时间

头文件: sys/time.h unistd.h

函数定义: settimeofday()会把目前时间设成由tv所指的结构信息, 当地时区信息则设成tz所指的结构. 详细的说明请参考gettimeofday(). 注意, 只有root权限才能使用此函数修改时间. 成功则返回0, 失败返回-1, 错误代码存于errno.

错误代码:

EPERM 并非由root权限调用settimeofday(), 权限不够

EINVAL 时区或某个数据是不正确的, 无法正确设置时间

strftime: 格式化日期和时间

头文件: time.h

函数定义: size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);

说明: strftime()会将参数tm的时间结构, 参照参数format所指定的字符串格式做转换, 转换后的字符串内容将复制到参数s所指的字符串数组中, 该字符串的最大长度为参数max所控制. 下面是参数format的格式指令:

%a 当地星期日期的名称缩写, 如: Sun

%A 当地星期日期的名称缩写, 如: Sunday

%b 当地月份的缩写

%B 当地月份的完整名称

%c 当地适当的日期与时间表示法

%C 以year/100表示年份

%d 月里的天数, 表示法为01-31

%D 相当于"%m%d%y"格式

%e 月里的天数, 表示法为1-31

%h 当地月份的缩写

%H 以24小时制表示小时数, 表示法为00-23

%I 以12小时制表示小时数, 表示法为01-12

%j 一年中的天数(001-366)

%k 以24小时制表示小时数, 表示法为0-23

%l 以12小时制表示小时数, 表示法为1-12

%m 月份(01-12)

%M 分钟数(00-59)

%n 同/n

%p 显示对应的AM或PM

%P 显示对应的am或pm

%r 相当于使用"%I:%M:%S %p"格式

%R 相当于使用"%H:%M"格式

%s 从1970年1月1日0时0分0秒算起至今的UTC时间所经过的秒数

%S 秒数(00-59)

%t 同/t

%T 24小时时间表示, 相当于"%H:%M:%S"格式

%u 一星期中的星期日期, 范围1-7, 星期一从1开始

%U 一年中的星期数(00-53), 一月第一个星期日开始为01

%w 一星期中的星期日期, 范围0-6, 星期日从0开始

%W 一年中的星期数(00-53), 一月第一个星期一开始为01

%x 当地适当的日期表示

%X 当地适当的时间表示

%y 一世纪中的年份表示

%Y 完整的公元年份表示

%Z 使用的时区名称

%% '%'符号

返回复制到参数s所指的字符串数组的总字符数, 不包括字符串结束符. 如果返回0, 表示未复制字符串到参数s内, 但不表示一定有错误发生.

附加说明: 环境变量TZ和TC_TIME会影响此函数结果.

应用举例:

#include

#include

int main(void)

{

char *format[] = {"%I: %M: %S %p %m/%d %a", "%x %X %Y", NULL};

char buf[30];

int i;

time_t clock;

struct tm *tm;

time(&clock);

tm = localtime(&clock);

for(i = 0; format[i] != NULL; i++)

{

strftime(buf, sizeof(buf), format[i], tm);

printf("%s => %s/n", format[i], buf);

}

return 0;

}

运行结果:

%I: %M: %S %p %m/%d %a => 01: 46: 44 AM 12/15 Mon

%x %X %Y => 12/15/08 01:46:44 2008

time: 取得目前的时间

头文件: time.h

函数定义: time_t time(time_t *t);

说明: time()会返回从1970年1月1日从0时0分0秒算起的UTC时间到现在所经过的秒数. 如果t并非空指针的话, 此函数也会将返回值存到t指针所指的内存. 成功则返回秒数, 失败则返回(time_t-1)值, 错误原因存于errno中.

tzset: 设置时区以供时间转换

头文件: time.h

函数定义: void tzset(void); extern char *tzname[2];

说明: tzset()用来将环境变量TZ设给全局变量tzname, 也就是从环境变量取得目前当地的时区. 时间转换函数会自动调用此函数. 若TZ为设置, tzname会依照

/etc/localtime找出最接近当地的时区. 若TZ为NULL, 或是无法判认, 则使用UTC 时区. 此函数总是成功, 并且初始化tzname.

linux定时器详解

Linux内核定时器详解 80X86体系结构上,常用的定时器电路 实时时钟(RTC) RTC内核通过IRQ8上发出周期性的中断,频率在2-8192HZ之间,掉电后依然工作,内核通过访问0x70和0x71 I/O端口访问RTC。 时间戳计时器(TSC) 利用CLK输入引线,接收外部振荡器的时钟信号,该计算器是利用64位的时间戳计时器寄存器来实现额,与可编程间隔定时器传递来的时间测量相比,更为精确。 可编程间隔定时器(PIT) PIT的作用类似于微波炉的闹钟,PIT永远以内核确定的固定频率发出中断,但频率不算高。 CPU本地定时器 利用PIC或者APIC总线的时钟计算。 高精度时间定时器(HPET) 功能比较强大,家机很少用,也不去记了。 ACPI电源管理定时器 它的时钟信号拥有大约为3.58MHZ的固定频率,该设备实际上是一个简单的计数器,为了读取计算器的值,内核需要访问某个I/O端口,需要初始化 定时器的数据结构 利用timer_opts描述定时器 Timer_opts的数据结构 Name :标志定时器员的一个字符串 Mark_offset :记录上一个节拍开始所经过的时间,由时钟中断处理程序调用 Get_offset 返回自上一个节拍开始所经过的时间

Monotonic_clock :返回自内核初始化开始所经过的纳秒数 Delay:等待制定数目的“循环” 定时插补 就好像我们要为1小时35分34秒进行定时,我们不可能用秒表去统计,肯定先使用计算时的表,再用计算分的,最后才用秒表,在80x86架构的定时器也会使用各种定时器去进行定时插补,我们可以通过cur_timer指针来实现。 单处理器系统上的计时体系结构 所有与定时有关的活动都是由IRQ线0上的可编程间隔定时器的中断触发。 初始化阶段 1. 初始化间,time_init()函数被调用来建立计时体系结构 2. 初始化xtime变量(xtime变量存放当前时间和日期,它是一个timespec 类型的数据结构) 3. 初始化wall_to_monotonic变量,它跟xtime是同一类型的,但它存放将加在xtime上的描述和纳秒数,这样即使突发改变xtime也不会受到影响。 4. 看是否支持高精度计时器HPET 5. 调用select_timer()挑选系统中可利用的最好的定时资源,并让 cur_timer变量指向该定时器 6. 调用setup_irq(0,&irq0)来创建与IRQ相应的中断门。 时钟中断处理程序 1. 在xtime_lock顺序锁产生一个write_seqlock()来保护与定时相关的内核变量,这样防止中断让该进程被阻止。 2. 执行cur_timer定时器对象的mark_offset方法(记录上一个节拍开始所经过的时间,由时钟中断处理程序调用) 3. 调用do_timer_interrupt函数,步骤为 a) 使jiffies_64值增1 b) 调用updata_times()函数来更新系统日期和时间。

如何获取本周,本月,本日的开始时间和结束时间的时间戳

获取本日,本周,本月的开始时间戳和结束时间戳 这是我最近尝试写的一个程序,可能有许多不足之处,还请见谅。 这是一个类,类里面主要有两个方法。 一个是timeToTimestamp (),一个是getTime()。 前者负责将时间转化成时间戳,后者则负责判断filter值,然后设置相应的date时间。 注:filter=1 代表本日,filter=2 代表本周,filter=3代表本月。 class TimestampUtils{ private static long startTime = -1; private static long endTime = -1; public static void getTime (int filter){ Calendar cal =Calendar.getInstance(); SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd" ); //设置星期一为一周的开始日 cal.setFirstDayOfWeek(Calendar.MONDAY); switch(filter){ case 1://今天 startTime = timeToTimestamp(format.format(new Date())+" 00:00: 00"); endTime = timeToTimestamp(format.format(new Date())+" 23:59: 59");

break; case 2://本周 cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); startTime = timeToTimestamp(format.format(cal.getTime())+" 00:0 0:00"); cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); endTime = timeToTimestamp(format.format(cal.getTime())+" 23:5 9:59"); break; case 3://本月 cal.set(Calendar.DATE, cal.getActualMinimum(Calendar.DATE)); startTime = timeToTimestamp(format.format(cal.getTime())+" 00:0 0:00"); cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE)) ; endTime = timeToTimestamp(format.format(cal.getTime())+" 23:5 9:59"); break; default: break; } }

linux下的时间转换函数

linux下的时间函数 我们在编程中可能会经常用到时间,比如取得系统的时间(获取系统的年、月、日、时、分、秒,星期等),或者是隔一段时间去做某事,那么我们就用到一些时间函数。 linux下存储时间常见的有两种存储方式,一个是从1970年到现在经过了多少秒,一个是用一个结构来分别存储年月日时分秒的。 time_t 这种类型就是用来存储从1970年到现在经过了多少秒,要想更精确一点,可以用结构struct timeval,它精确到微妙。 struct timeval { long tv_sec; /*秒*/ long tv_usec; /*微秒*/ }; 而直接存储年月日的是一个结构: struct tm { int tm_sec; /*秒,正常范围0-59,但允许至61*/ int tm_min; /*分钟,0-59*/ int tm_hour; /*小时,0-23*/ int tm_mday; /*日,即一个月中的第几天,1-31*/ int tm_mon; /*月,从一月算起,0-11*/ int tm_year; /*年,从1900至今已经多少年*/ int tm_wday; /*星期,一周中的第几天,从星期日算起,0-6*/ int tm_yday; /*从今年1月1日到目前的天数,范围0-365*/ int tm_isdst; /*日光节约时间的旗标*/ };

需要特别注意的是,年份是从1900年起至今多少年,而不是直接存储如2008年,月份从0开始的,0表示一月,星期也是从0开始的,0表示星期日,1表示星期一。 下面介绍一下我们常用的时间函数: #include char *asctime(const struct tm* timeptr); 将结构中的信息转换为真实世界的时间,以字符串的形式显示 char *ctime(const time_t *timep); 将timep转换为真是世界的时间,以字符串显示,它和asctime不同就在于传入的参数形式不一样 double difftime(time_t time1, time_t time2); 返回两个时间相差的秒数 int gettimeofday(struct timeval *tv, struct timezone *tz); 返回当前距离1970年的秒数和微妙数,后面的tz是时区,一般不用 struct tm* gmtime(const time_t *timep); 将time_t表示的时间转换为没有经过时区转换的UTC时间,是一个struct tm结构指针 stuct tm* localtime(const time_t *timep); 和gmtime类似,但是它是经过时区转换的时间。 time_t mktime(struct tm* timeptr); 将struct tm结构的时间转换为从1970年至今的秒数 time_t time(time_t *t); 取得从1970年1月1日至今的秒数。 上面是简单的介绍,下面通过实战来看看这些函数的用法: 下载: gettime1.c 1. /*gettime1.c*/ 2. #include 3. int main()

最新整理Linux系统修改时间用什么命令

L i n u x系统修改时间用什么命令 L i n u x中除了在控制面板手动设置时间外,还能用命令直接修改,如果熟悉命令的话,非常快,具体怎么操作呢。下面由学习啦小编为大家整理修改l i n u x时间的命令的相关知识,希望对大家有帮助! 修改l i n u x时间命令 我们一般使用d a t e-s命令来修改系统时间。比如将系统时间设定成1996年6月10日的命令如下。 #d a t e-s06/10/96 将系统时间设定成下午1点12分0秒的命令如下。 #d a t e-s13:12:00 注意,这里说的是系统时间,是l i n u x由操作系统维护的。 在系统启动时,L i n u x操作系统将时间从C M O S中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与C M O S时间的一致性, L i n u x 每隔一段时间会将系统时间写入C M O S。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行d a t e -s后,如果马上重起机器,修改时间就有可能没有被写入C M O S,这就是问题的原因。如果要确保修改生效可以

执行如下命令。 #h w c l o c k-w 这个命令强制把系统时间写入C M O S 相关阅读:L i n u x常用基本命令 文件名--t e s t m k d i r t e s t创建一个文件夹 m k d i r t e s t/t e s t1/t e s t2-p在创建t e s t1时候,继续创建t e s t2目录,一起创建 m v t e s t t e s t1修改文件名称 m v t e s t/位置复制文件到指定位置 c a t t e s t查看文件内容 u n z i p解压包解压当前文件 u n z i p解压包 -d/位置解压压缩包到指定位置 r m t e s t删除一个文件 r m-r f t e s t删除一个带文件或者文件夹的文件目录 c p t e s t t e s t1复制一个文件 c p-r t e s t t e s t1复制一个文件夹(包含文件夹下的文件) v i文件名修改文件内容

把Oracle 字符串转换成TIMESTAMP类型的方案

使用Oracle函数: TO_TIMESTAMP_TZ('2009-3-9 17:51:23.23 -05:00', 'YYYY-MM-D HH24:MI:SS.FF TZH:TZM') TO_DATE(yourdate,'YYYY-MM-D HH24:MI:SS'); 字符串转日期Date T0_CHAR(yourdate,'YYYY-MM-D HH24:MI:SS'); 日期Date转字符串 eg: update t_fl_flownote set sendtime=TO_TIMESTAMP_TZ('2009-11-30 10:47:16','YYYY-MM-DD HH24:MI:SS') 转别人的日志 我们都知道date和timestamp都是对日期和时间的表示,只是两种类型的精确度不同,前者精确到秒,后者精确到小数秒(fractional_seconds_precision),可以是 0 to 9,缺省是6。 Oracle 字符串转换但是对date类型的运算很简单,有很多函数可用来处理;而两个timestamp的差则是很直观地显示为多少天+多少小时+多少分钟+多少秒+多少小数秒,SQL> create table test (T1 TIMESTAMP(6), 2 T2 TIMESTAMP(6)); 表已创建。 SQL> insert into test values( 2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd hh24:mi:ss.ff'), 3 to_timestamp('2006-01-01 12:20:10.2','yyyy-mm-dd hh24:mi:ss.ff')); 已创建 1 行。 SQL> SQL> insert into test values( 2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd hh24:mi:ss.ff'), 3 to_timestamp('2006-01-02 12:20:10.2','yyyy-mm-dd hh24:mi:ss.ff')); 已创建 1 行。

unix时间戳与datetime类型时间之前的转换

unix时间戳与datetime类型时间之前的 转换 问题:unix时间戳与datetime类型时间之前的转换回答: #region 日期转换数字 /// /// 将Unix时间戳转换为DateTime类型时间 /// ///double 型数字/// DateTime public static System.DateTime ConvertIntDateTime(double d) System.DateTime time = System.DateTime.MinValue; System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); time = startTime.AddSeconds(d); return time; /// /// 将c# DateTime时间格式转换为Unix时间戳格式 /// ///时间/// double

public static double ConvertDateTimeInt(System.DateTime time) double intResult = 0; System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); intResult = (time startTime).TotalSeconds; return intResult; #endregion

Centos设置时区并调整时间

Centos设置时区并调整时间 租用的经常是国外的服务器,需要调整时区并调整时间.当然方法有很多种,我说说我经常用,而且是最简单的方法吧. cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ntpdate https://www.wendangku.net/doc/156722147.html, 很简单吧,解析一下,第一句是把当前时区调整为上海就是+8区,想改其他时区也可以去看看/usr/share/zoneinfo目录;然后第二句是利用ntpdate同步标准时间. 没有ntpdate的可以yum一下: yum install -y ntpdate 另外VMWARE下的linux时间老是不对,也可以用ntpdate来调整,算最烂的方法吧 crontab -e * * * * * /usr/sbin/ntpdate https://www.wendangku.net/doc/156722147.html, | logger -t NTP 设置修改CentOS系统时区 在我们使用CentOS系统的时候,也许时区经常会出现问题,有时候改完之后还是会出错,下面我们就来学习一种方法来改变这个状况。如果没有安装,而你使用的是 CentOS系统那使用命令 yum install ntp 然后:ntpdate https://www.wendangku.net/doc/156722147.html, 。 因为CentOS系统是用rhas的源码再编译的,很多地方是完全一样的。

rhas5的时区是以文件形式存在的,当前的时区文件是在/etc/localtime 那么其他时区的文件存放在哪里呢? 在/usr/share/zoneinfo下 我们用东八区,北京,上海的时间 #cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #reboot 重启之后,date查看时间、查看当前时区 date -R、查看/修改Linux时区和时间 一、时区 1. 查看当前时区 date -R 2. 修改设置时区 方法(1) tzselect 方法(2) 仅限于RedHat Linux 和 CentOS系统 timeconfig 方法(3) 适用于Debian dpkg-reconfigure tzdata 3. 复制相应的时区文件,替换CentOS系统时区文件;或者创建链接文件 cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime 在中国可以使用: cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 二、时间 1、查看时间和日期 date

如何实现时间戳转换

版式阅读软件,云签章,可信时间戳 如何实现时间戳转换 如何实现时间戳转换。以前遇到过一个关于时间戳的问题,为了要大家更明白,先说一下概念。 具体时间戳怎么定义的我也不清楚,但百度百科中有这么一句:“时间戳是自 1970 年 1 月 1 日(00:00:00 GMT )至当前时间的总秒数”。 按这个定义,编程语言中倒是有一种类似的函数,getTime(),但这个函数返回的是自1970年1月1日到当前时间的总 毫秒数 ,而不是总 秒数。 在js 中,将一个字符转化成Date 型也不是什么难事: var str = '2013-08-30'; // 日期字符串 str = str.replace(/-/g,'/'); // 将-替换成/,因为下面这个构造函数只支持/分隔的日期字符串。

var date = new Date(str); // 构造一个日期型数据,值为传入的字符串。 在上面,new Date(str)构造了一个日期,参数str至少要提供年月日三部分,也就是形如“2013/03/08”的字符串,不能是"2013/03",否则将得到一个NaN。此时构造出来的时间是:2013/03/08 00:00:00。同时你还可以传入小时、分钟和秒数,但不能只传入小时,比如“2013/03/08 17”,这样的参数同样会得到一个NaN。参数可以是“2013/03/08 17:20”或者“2013/03/08 17:20:05”,这样都可以得到正确的时间,其中如果秒数没给出,则默认为0。 此时得到的是日期型数据,如果要得到上面所谓的时间戳,可以这样: var time = date.getTime(); 版式阅读软件,云签章,可信时间戳

linux下获取系统时间的方法

linux下获取系统时间的方法 时间:2009-11-11 13:45:04 来源:Linux联盟作者:可以用localtime 函数分别获取年月日时分秒的数值。 Linux下获得系统时间的C语言的实现方法: 1. 可以用localtime 函数分别获取年月日时分秒的数值。 #include //C语言的头文件 #include //C语言的I/O void main() { time_t now; //实例化time_t结构 struct tm *timenow; //实例化tm结构指针 time(&now); //time函数读取现在的时间(国际标准时间非北京时间),然后传值给now timenow = localtime(&now); //localtime函数把从time取得的时间now换算成你电脑中的时间(就是你设置的地区) printf("Local time is %sn",asctime(timenow)); //上句中asctime函数把时间转换成字符,通过printf()函数输出 } 注释:time_t是一个在time.h中定义好的结构体。而tm结构体的原形如下: struct tm { int tm_sec;//seconds 0-61 int tm_min;//minutes 1-59 int tm_hour;//hours 0-23 int tm_mday;//day of the month 1-31 int tm_mon;//months since jan 0-11 int tm_year;//years from 1900 int tm_wday;//days since Sunday, 0-6 int tm_yday;//days since Jan 1, 0-365 int tm_isdst;//Daylight Saving time indicator }; 2. 对某些需要较高精准度的需求,Linux提供了gettimeofday()。

linux定时器和Jiffies

1.linux HZ Linux核心几个重要跟时间有关的名词或变数,以下将介绍HZ、tick与jiffies。 HZ Linux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来定义每一秒有几次timer interrupts。举例来说,HZ为1000,代表每秒有1000次timer interrupts。 HZ可在编译核心时设定,如下所示(以核心版本 adrian@adrian-desktop:~$ cd /usr/src/linux adrian@adrian-desktop:/usr/src/linux$ make menuconfig Processor type and features ---> Timer frequency (250 HZ) ---> 其中HZ可设定100、250、300或1000。 小实验 观察/proc/interrupt的timer中断次数,并于一秒后再次观察其值。理论上,两者应该相差250左右。 adrian@adrian-desktop:~$ cat /proc/interrupts | grep timer && sleep 1 && cat /proc/interrupts | grep timer 0: 9309306 IO-APIC-edge timer 0: 9309562 IO-APIC-edge timer 上面四个栏位分别为中断号码、CPU中断次数、PIC与装置名称。

要检查系统上HZ的值是什么,就执行命令 cat kernel/.config | grep '^CONFIG_HZ=' 2.Tick Tick是HZ的倒数,意即timer interrupt每发生一次中断的时间。如HZ为250时,tick为4毫秒(millisecond)。 3.Jiffies Jiffies为Linux核心变数(unsigned long),它被用来记录系统自开机以来,已经过了多少tick。每发生一次timer interrupt,Jiffies变数会被加一。值得注意的是,Jiffies于系统开机时,并非初始化成零,而是被设为-300*HZ (arch/i386/kernel/time.c),即代表系统于开机五分钟后,jiffies 便会溢位。那溢位怎么办?事实上,Linux核心定义几个macro(timer_after、time_after_eq、time_before与time_before_eq),即便是溢位,也能借由这几个macro正确地取得jiffies的内容。 另外,80x86架构定义一个与jiffies相关的变数jiffies_64 ,此变数64位元,要等到此变数溢位可能要好几百万年。因此要等到溢位这刻发生应该很难吧。

PowerQuery技巧之Unix时间戳转换

Unix时间戳转换 Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。Unix时间戳不仅被使用在Unix 系统、类Unix系统中,也在许多其他操作系统中被广泛采用。 有些从系统导出或网抓的数据,时间为时间戳格式,Power Query并没有直接的函数对其转换,但可以通过自定义函数实现。 let timestamp = (x)=>#datetime(1970,1,1,8,0,0)+#duration(0,0,0,x), time = timestamp(1502374503) in time 公式非常简单,duration表示持续时间,直接加上起始的北京时间。 而有些语言的时间戳是13位的,比10位的精度更高一些,高在后3位。但是精不精度和我们没什么关系,我们不需要,把后三位去掉即可。 let timestamp = (x)=>#datetime(1970,1,1,8,0,0)+#duration(0,0,0,Number.IntegerDivide(x/1000,1)), time = timestamp(1502353621929) in time 如果是反过来,要把时间转换为时间戳呢? 那就先用时间减去初始时间,然后转换为总秒数,结果可能为小数,最后再取个整。以求当前时间的时间戳为例:let time = (x)=> Number.IntegerDivide(Duration.TotalSeconds(x-#datetime(1970,1,1,8,0,0)),1), timestamp = time(DateTime.LocalNow()) in timestamp

Linux常用函数查询

1: 系统调用:打开一个文件 函数原型:int open(const char pathname, info flage, /* mdode_t m) 头文件:#include #include #include 参数:flag 1> 下面三个常量只能选用一个: O_RDONLY, O_WRONLY, O_RDWR 2> O_CREAT :如果文件不存在,则创建此文件,选用 个参数时,必须同时指定mode参数 3> O_SYNC :最严格的同步方式,每次write操作在 数据和属性都协议时再返回 2:系统调用:改变文件的所有者 1> 函数原型:int chown(cont char *path, uid_t uid, gid_t gid) ; int fchown(int fd, uid_t uid, gid_t gid) ; int lchown(int fd, uid_t uid, gid_t gid) ; 2> 头文件:#include #include 3> 参数:略 4> 返回值:略 3:系统调用:创建连接 1> 函数原型:int link(const char *existPath, const char *newPath) ; 2> 头文件:#include 3> 参数:existpath :已经存在的文件 newpath :新的文件 4> 返回值:略 4:系统调用:删除一个文件 5> 备注:如果newpath已经存在,则失败 4:系统调用:删除一个文件 1> 函数原型:int unlink(const char *path) ; 2> 头文件:#include 3> 参数:略 4> 返回值:略 5> 备注:调用的函数的结果是使得文件的inode-1,如果i_node=0 则自动删除文件数据区 5:标准函数:重命令函数 1> 函数原型:int rename(const char *oldname, const char *newname) ; 2> 头文件:#include 3> 参数:略 4> 返回值:略 6:系统调用:读连接文件内容函数

linux修改时间日期

linux修改时间和日期的方法 修改linux的时间可以使用date指令 修改日期: 时间设定成2009年5月10日的命令如下: #date -s 05/10/2009 修改时间: 将系统时间设定成上午10点18分0秒的命令如下。 #date -s 10:18:00 修改时区: 找到相应的时区文件/usr/share/zoneinfo/Asia/Shanghai替换当前的/etc/localtime。 修改/etc/sysconfig/clock文件的内容为: ZONE=”Asia/Shanghai” UTC=false ARC=false 同步bios时间: 同步BIOS时钟,强制把系统时间写入CMOS,命令如下: #clock -w date命令的功能是显示和设置系统日期和时间。 输入date 查看目前系统时间。 修改时间需要date -功能字符修改内容 命令中各选项的含义分别为: -d datestr, --date datestr 显示由datestr描述的日期 -s datestr, --set datestr 设置datestr 描述的日期 -u, --universal 显示或设置通用时间

时间域 %H 小时(00..23) %I 小时(01..12) %k 小时(0..23) %l 小时(1..12) %M 分(00..59) %p 显示出AM或PM %r 时间(hh:mm:ss AM或PM),12小时 %s 从1970年1月1日00:00:00到目前经历的秒数 %S 秒(00..59) %T 时间(24小时制)(hh:mm:ss) %X 显示时间的格式(%H:%M:%S) %Z 时区日期域 %a 星期几的简称(Sun..Sat) %A 星期几的全称(Sunday..Saturday) %b 月的简称(Jan..Dec) %B 月的全称(January..December) %c 日期和时间(Mon Nov 8 14:12:46 CST 1999) %d 一个月的第几天(01..31) %D 日期(mm/dd/yy) %h 和%b选项相同 %j 一年的第几天(001..366) %m 月(01..12) %w 一个星期的第几天(0代表星期天) %W 一年的第几个星期(00..53,星期一为第一天) %x 显示日期的格式(mm/dd/yy) %y 年的最后两个数字(1999则是99) %Y 年(例如:1970,1996等) 需要特别说明的是,只有超级用户才能用date命令设置时间,一般用户只能用date命令显示时间。 例1:用指定的格式显示时间。 $ date '+This date now is =>%x ,time is now =>%X ,thank you !' This date now is =>11/12/99 ,time is now =>17:53:01,thank you ! 例2:用预定的格式显示当前的时间。 # date

linux系统时区设置

linux系统时区设置 系统时钟设置 格式:date 月/日时:分:年.秒 [root@localhost ~]# date 080319462010.55 二 8月 3 19:46:55 CST 2010 或使用date –set (月/日/年时:分:秒)设置时钟。 [root@localhost ~]# date –set “08/30/2010 09:50:11″(月/日/年时:分:秒)一 8月 30 09:50:11 CST 2010 查看系统时钟 [root@localhost ~]# date 日 8月 1 15:56:27 CST 2010 hwclock | clock时钟查看相同 [root@localhost ~]# hwclock –show 2010年08月01日星期日 16时07分01秒 -0.185252 seconds 设置硬件时钟 硬件时钟设置格式:hwclock | clock –set –date=(”月/日/年时:分:秒”)[root@localhost ~]# hwclock –set –date=”08/03/2010 19:57″ [root@localhost ~]# clock 2010年08月03日星期二 19时57分07秒 -0.462124 seconds [root@localhost ~]# clock –set –date=”08/03/10 20:00″ [root@localhost ~]# hwclock 2010年08月03日星期二 20时00分08秒 -0.236903 seconds 系统与硬件时钟同步 [root@localhost ~]# hwclock –systohc [root@localhost ~]# date 二 8月 3 19:59:23 CST 2010 [root@localhost ~]# clock 2010年08月03日星期二 19时59分32秒 -0.813133 seconds [root@localhost ~]# clock –systohc [root@localhost ~]# date 二 8月 3 20:00:06 CST 2010 将时钟信息永久写入BIOS中,避免重启系统时钟失效。 hwclock / clock -w 系统时区设置 使用tzselect设置系统时区。 [root@localhost ~]# tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent or ocean. 1) Africa 2) Americas 3) Antarctica 4) Arctic Ocean 5) Asia 6) Atlantic Ocean

ffmpeg时间戳问题汇总

ffmpeg时间戳问题汇总 A:RFC3984 规定采用 90000 Hz 的时钟,因此如果编码帧频是 30,那么时间 戳间 隔就该是 90000 / 30 3000,根据抓包来看,似乎时间戳间隔的确是 3000。 时间戳 的间隔不固定,比如有的时间戳间隔是 2990 有的是 3002,会导致解析出来的视 频快播的效果么Q:各位大侠好:我现在正在开发视频实时流播放,简单的过程 如 下:采集视频流 - 视频流转换为 Sorenson H.263 编码格式 - 把编码的实时 流通过 RTMP 协议发送 - flash 客户端进行播放。现在我的时间戳颗粒是这样生成的:第 一帧的时间戳为 0;第二帧的时间戳的算法为:第一个字符编码的当前时间 - 上一 帧第一个字符编码的当前时间根据这个时间颗粒的算法,我在 flash 客户端 播放就 会产生延时。请问各位大侠有什么好的建议或是文档之类的,以前 firstime 管管建 议我看 RFC4629 文档,但是效果不太明显,谢谢~A;时间戳顺序累加就行了,每次加 1Q:最近做了一个捕捉摄像头并保存 FLV 的小东西,发现转换完毕后 的

FLV 文件,用播放器播放的时候,速度特别快,大概是正常速度的 4 倍。请问这 是怎么回事,网上搜了一下,说是时间戳的问题,可是 PTS 我跟了,AVPacket 的 PTS 是每帧增长 40,time_base 为: 25/s.。DTS 是个无效值。PTS 的计算是根据 ffmpeg 的例子写的。pkt.pts av_rescale_qoAcc-coded_frame-pts oAcc-time_base audio_st-time_base1. dts 到底需不需要自己计算,2. 还有播放速度过快的可能原 因,3. 还有 PTS 和 DTS 的具体含义,int64_t pts /// presentation time stamp in time_base unitsint64_t dts /// decompression time stamp in time_base units上面的意思 是不是说,播放器根据 PTS 进行播放。然后 DTS 是在编码的时候自己设置,刚 用 ffmpeg,好些东西不懂,还请大侠多多指教------刚才又试了一下,把time_base 降 为 10 帧每秒。播放速度和正常速度接近。但是不知道 FLV 文件的帧率该设置多 少合适。有没有一个权威的说法。A:我也做摄像头捕捉,跟你出现一样的问题,我 自己分析的话,应该是捕捉摄像头的图像的速度只有 10 帧每秒,但是保存成视频 25 帧每秒的话播放看起来就非常快,但是我摄像头捕捉设定的是 25 帧每秒,难道

linux时间函数

一、头文件 #include 二、结构体 a)tm结构体 struct tm { int tm_sec;//秒 int tm_min;//分 int tm_hour;//小时 int tm_mday;//月的第几天 int tm_mon;//月份 int tm_year;//年 int tm_wday;//0~6,星期 int tm_yday;// int tm_isdst;// long int tm_gmtoff;// const char * tm_zone;//时区字符串 }; b)timeval结构体 struct timeval{ long tv_sec;//秒 long tv_usec;//微秒 } c)timezone结构体 struct timezonel{ int tz_minuteswest;//和Greenwich时间差了多少分钟 int tz_dsttime;//日光节约的时间状态 } 三、例子 a)time + ctime配合,time返回当前时间的秒数,把时间参数存于time_t tiCurrent中 time_t tiCurrent; int seconds = time(&tiCurrent);// int seconds = time((time_t *)NULL); printf("%d\n", seconds);//printf("%d\n", (int)tiCurrent);效果是一样的 char *cTimeNow; cTimeNow = ctime(&tiCurrent); printf("%s\n", cTimeNow); b)gettimeofday,获取时间秒数和微妙数,存于struct timeva结构体中 struct timeval tvTime; gettimeofday(&tvTime, (struct timezone *)0); printf("%ld\n", https://www.wendangku.net/doc/156722147.html,_sec); printf("%ld\n", https://www.wendangku.net/doc/156722147.html,_usec); c)time+localtime(用localtime_r代替),类似于与ctime。Localtime把返回值存于结构 体struct tm中,下面的代码与(a)中的代码获得相同的结果 time_t tiCurrent;

Linux时间同步,ntpd,ntpdate-简单设置

linux时间同步,ntpd、ntpdate 在Windwos中,系统时间的设置很简单,界面操作,通俗易懂。而且设置后,重启,关机都没关系。系统时间会自动保存在Bios的时钟里面,启动计算机的时候,系统会自动在Bios里面取硬件时间,以保证时间的不间断。 但在Linux下,默认情况下,系统时间和硬件时间,并不会自动同步。在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰。硬件时间的运行,是靠Bios电池来维持,而系统时间,是用CPU tick来维持的。 在系统开机的时候,会自动从Bios中取得硬件时间,设置为系统时间。 一.Linux系统时间的设置 在Linux中设置系统时间,可以用date命令: //查看时间 [root@localhost ~]# date 2008年12月12日星期五14:44:12 CST //修改时间 [root@localhost ~]# date --set "1/1/09 00:01" <== (月/日/年时:分:秒) 2009年01月01日星期四00:01:00 CST //date 有几种时间格式可接受,这样也可以设置时间: [root@localhost ~]# date 012501012009.30 <== 月日时分年.秒 2009年01月25日星期日01:01:30 CST 二.Linux硬件时间的设置 硬件时间的设置,可以用hwclock或者clock命令。其中,clock和hwclock用法相近,只用一个就行,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件体系。 //查看硬件时间可以是用hwclock ,hwclock --show 或者hwclock -r [root@localhost ~]# hwclock --show 2008年12月12日星期五06时52分07秒-0.376932 seconds //设置硬件时间 [root@localhost ~]# hwclock --set --date="1/25/09 00:00" <== 月/日/年时:分:秒 [root@localhost ~]# hwclock 2009年01月25日星期日00时00分06秒-0.870868 seconds 三.系统时间和硬件时间的同步

linux stat函数讲解

stat函数讲解 表头文件: #include #include 定义函数: int stat(const char *file_name, struct stat *buf); 函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中返回值: 执行成功则返回0,失败返回-1,错误代码存于errno 错误代码: ENOENT 参数file_name指定的文件不存在 ENOTDIR 路径中的目录存在但却非真正的目录 ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接 EFAULT 参数buf为无效指针,指向无法存在的内存空间 EACCESS 存取文件时被拒绝 ENOMEM 核心内存不足 ENAMETOOLONG 参数file_name的路径名称太长 #include #include #include int main() { struct stat buf; stat("/etc/hosts", &buf); printf("/etc/hosts file size = %d\n", buf.st_size); } ----------------------------------------------------- struct stat { dev_t st_dev; //文件的设备编号 ino_t st_ino; //节点 mode_t st_mode; //文件的类型和存取的权限 nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1 uid_t st_uid; //用户ID gid_t st_gid; //组ID dev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号 off_t st_size; //文件字节数(文件大小) unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小) unsigned long st_blocks; //块数 time_t st_atime; //最后一次访问时间 time_t st_mtime; //最后一次修改时间 time_t st_ctime; //最后一次改变时间(指属性) }; 先前所描述的st_mode 则定义了下列数种情况: S_IFMT 0170000 文件类型的位遮罩 S_IFSOCK 0140000 scoket S_IFLNK 0120000 符号连接 S_IFREG 0100000 一般文件

相关文档