UNIX系统管理:系统调用-time系统调用

在计算机的硬件中包含一个系统时钟,系统引导的时候读取该时钟,然后维持它自己的时钟计数器,利用时钟计数器对系统内的事件,如文件的创建或用户登录等给出时间记录。时钟值也可以利用time()系统调用供你自己的程序使用:

#include <sys/types/h>

#include (time.h>

time_t time(time_t *loc);

这个系统调用返回一个time_t值,如果参数loc是指向这种类型的变量的指针,则返回值也被拷贝到这个指针所指的变量中。

数据类型time_t实际上由typedef定义,可以通过<time.h>访问,它的基本">数据类型是long。因此time()系统调用返回一个长型整数作为当前时钟的时间值,但是,这是一种奇怪格式,即从格林威治时间1970年1月1日午夜起所经过的秒数(我假定这个时钟必定在某一时刻开始...)。

有一个枝节问题是:它用一个长型整数可以记录多长时间?如果限制在32位长的正整数范围内(负值对时间没有任何意义!),则它刚好超过68年,或者说直到2038年初(还有充裕的时间想一个替代办法)。

这种时间格式实际上相当有用,如果你想要解决两个事件之间(例如你的登录时间和退出系统的时间)经过了多长时间,你只要从较早时间减去较晚时间就得到两个事件之间的秒数。

但是,在你想要显示日,月年或者当天的时间的情况下,这种时间格式就不太方便。为了简化这些操作,标准库中包含一些有用的函数为你进行转换。两个这样的函数是:

#include <time.h>

struct tm *gmtime(time_t *loc);

struct tm *localtime(time_t *loc);

这两个函数都取一个参数loc,它是指向包含‘自1970年以来的秒数’值的变量的指针。这里两个函数都返回指向一个结构的指针,该结构的域包含有要求的信息:

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_lsdst;

}

域tm_hour,tm_min,和tm_sec以24小时的时钟格式给出时钟时间,tm_mday是在1到31范围内的该月的日子,tm_mon是范围为0-11月数,一月(January)作为0,tm_year是自1900以来的年数,tm_wday是范围为0到6的一周的日子,星期天(Sunday)为0,tm_yday是范围为0到365该年的日子,一月一日(1 January)作为0,tm_isdst是一个标志规定夏时制是否有效(如果该信息可供使用)。

这两个函数的主要差别是gmtime()给出的它的相对于格林威治时间(GMT)的时间信息,而localtime()给出的它的相对你的本地时区的时间信息(在系统安装和配置期间设置本地时区)。

时间: 2024-10-23 19:13:12

UNIX系统管理:系统调用-time系统调用的相关文章

Webmin 1.560发布 基于Web的Unix系统管理工具

Webmin 1.560该版式本有一些重大的更新包括翻译更新,网络桥接的支持,一个新的文本登录模块不再需要Java的支持,GPT支持大硬盘,支持CentOS 6等等. Webmin是目前功能最强大的基于Web的Unix系统管理工具.管理员通过浏览器访问Webmin的各种http://www.aliyun.com/zixun/aggregation/17569.html">管理功能并完成相应的管理动作.目前Webmin支持绝大多数的Unix系统,这些系统除了各种版本的linux以外还包括:A

UNIX系统管理:系统调用-进程间高级通信

基本上所有的系统调用成功时返回0或正数,失败时返回负值. 消息通信 每个消息队列都有一个msqid_ds类型的控制结构,该结构中包括对消息队列的访问权限,其数据结构如下: struct msqid_ds { struct ipc_perm msg_perm; /*操作权限结构 */ struct msg msg_first; /*指向消息队列的第一个结构*/ struct msg msg_last; /*指向消息队列的最后一个结构*/ ushort msg_cbytes; /*队列中当前字节数*

UNIX系统管理:系统调用-进程间通信

基本上所有的系统调用成功时返回0或正数,失败时返回负值. 进程的用户标志号管理 系统调用的格式 #include <unistd.h> unsigned short getuid() unsigned short getgid() unsigned short geteuid() unsigned short getegid() int setuid(int uid) int setgid(int gid) int seteuid(int euid) int setegid(int egid)

UNIX系统管理:系统调用-文件操作

基本上所有的系统调用成功时返回0或正数,失败时返回负值. 文件的创建与删除 create系统调用的格式 #include <fcntl.h> int creat(path,mode) const char *path; /*文件路径名*/ int mode; /*文件存取权*/ 参数与功能说明: 该调用创建名为path的文件.如果path已存在,则创建文件的进程对文目录应有执行权限, 并且对该文件有写权限.执行成功时,原先path文件的内容被清除,其长度被设置为0,原先文件的 mode,uid

UNIX系统管理:修复文件系统

完成这一章,你将能做以下事情: 理解文件系统是如何进行更新操作的 理解sync是如何预防文件系统错误 列出文件系统错误的三个原因 使用fsck检查和修补文件系统 文件系统的维护 日常的维护 -检查文件系统的一致性 -执行文件系统备份 -监控磁盘的使用情况 系统管理员的一个主要的职责就是保护用户的数据的安全.由于UNIX中数据通过文件系统的方式存储,系统会强制性检查文件系统的存储环境是否出现问题.文件系统的完整性十分重要,http://www.aliyun.com/zixun/aggregatio

UNIX系统管理:sdb的启动

首先来看看在哪些情况下需要对程序进行调试. 第一种情况(这是大多数用户都会碰到的),程序在运行过程中忽然跳了出来,屏幕上显示一个xxxx-core dumped消息,然后Shell提示符就又显示出来了,其中xxxx表示出错原因.这种情况的出现一般是系统核心认为进程的执行出现了异常,如进程试图去访问一块不允许它访问的存储区域(Memory Fault,Segmentation Fault);或者扫描某个无终止符的字符串(Bus http://www.aliyun.com/zixun/aggrega

UNIX系统管理:守护进程

守护进程(Demons)是在后台运行而有无终端或者登录shell和它结合在一起的进程.有许多标准的守护进程,其中的一些周期地运行来完成特定的任务(像atrun,典型地由cron每五分钟执行一次),而其余的则连续地运行,等待处理某些特定的事件(像inetd和lpd). 1.原理 有几种启动守护进程的方法.最常用的是: 在引导系统时启动.在这时运行的守护进程通常在系统启动script的执行周期间被启动.这些script典型地被存放在目录/etc/rc.d中. 手工地,从shell提示符启动.对任何具

UNIX系统管理:缺省设置,标准库函数的链接

我们已经知道链接实际上是指将在一个模块中引用的符号与它在另一个模块中的定义相链接的过程.并且我们还知道链接分为动态链接和静态链接两种方式.不论是对哪一种方式.链接程序都将搜索程序中的每一个模块,包括所用到的每一个库文件,以在这些文件中寻找在某个模块中没有定义的外部符号的定义.如果没有找到某个被引用的符号的定义,链接程序将报告错误.此时可执行文件的创建将会失败. 对于静态链接和动态链接,其区别主要在于搜索到某个符号的定义后链接程序所做的不同工作: 对静态链接,链接程序将把静态链接库(档案库)中哪些

UNIX系统管理:文件许可权限和存取

完成这一章,你可以做以下的事情: 描述和更改文件的属主和组. 描述和更改一个文件的许可权限. 描述和建立新文件的默认权限. 描述如何更改文件的用户和组的身份. 5.1 文件的权限和存取 存取一个文件需要用户的身份,和与文件相关的权限.这一章会介绍如何存取文件 权限 理解文件的读,写和执行权限 ls (ll,ls –l) 确定文件被赋予的存取权限. chmod 改变文件的存取权限. chown 改变一个文件的属主. umask 改变默认的文件存取权限 chgrp 改变一个文件的组. su 转换你的