linux时间相关结构体和函数整理

2023-05-16

一、时间类型。Linux下常用的时间类型有4个:time_t,struct timeb, struct timeval,struct timespec,clock_t, struct tm.

(1) time_t是一个长整型,一般用来表示用1970年以来的秒数.

该类型定义在<sys/time.h>中.

一般通过 time_t time = time(NULL); 获取.

(2) struct timeb结构: 主要有两个成员, 一个是秒, 另一个是毫秒, 精确度为毫秒.

  1. struct timeb
  2. {
  3.     time_t time;
  4.     unsigned short millitm;
  5.     short timezone;
  6.     short dstflag;
  7. };

由函数int ftime(struct timeb *tp); 来获取timeb.

成功返回0, 失败返回-1.

(3) struct timeval有两个成员,一个是秒,一个是微妙.

  1. struct timeval 
  2. {
  3.     long tv_sec; /* seconds */
  4.     long tv_usec; /* microseconds */
  5. };
由int gettimeofday(struct timeval *tv, struct timezone *tz);获取.
struct timezone结构的定义为:
  1. struct timezone
  2. {
  3.    int tz_minuteswest; /* 和Greewich时间差了多少分钟*/
  4.    int tz_dsttime; /* 日光节约时间的状态 */
  5. };

(4) struct timespec有两个成员,一个是秒,一个是纳秒, 所以最高精确度是纳秒.
  1. struct timespec
  2. {
  3.     time_t tv_sec; /* seconds */
  4.     long tv_nsec; /* nanoseconds */
  5. };
一般由函数long clock_gettime (clockid_t which_clock, struct timespec *tp); 获取.
获取特定时钟的时间,时间通过tp结构传回,目前定义了6种时钟,分别是

   CLOCK_REALTIME               统当前时间,从1970年1.1日算起

  CLOCK_MONOTONIC              系统的启动时间,不能被设置

  CLOCK_PROCESS_CPUTIME_ID     进程运行时间

  CLOCK_THREAD_CPUTIME_ID      线程运行时间

  CLOCK_REALTIME_HR            CLOCK_REALTIME的高精度版本

  CLOCK_MONOTONIC_HR           CLOCK_MONOTONIC的高精度版本

  获取特定时钟的时间精度:

  long clock_getres(clockid_t );

  设置特定时钟的时间:

  long clock_settime(clockid_t ,struct timespec*);

  休眠time中指定的时间,如果遇到信号中断而提前返回,则由left_time返回剩余的时间:

   long clock_nanosleep(clockid_t ,int flag,timespec* time,timespec* left_time);

(5) clock_t类型, 由clock_t clock(); 返回获取.

表示进程占用的cpu时间. 精确到微秒.

(6)struct tm是直观意义上的时间表示方法:

  1. struct tm 
  2. {
  3.     int tm_sec; /* seconds */
  4.     int tm_min; /* minutes */
  5.     int tm_hour; /* hours */
  6.     int tm_mday; /* day of the month */
  7.     int tm_mon; /* month */
  8.     int tm_year; /* year */
  9.     int tm_wday; /* day of the week */
  10.     int tm_yday; /* day in the year */
  11.     int tm_isdst; /* daylight saving time */
  12. };
struct tm* gmtime(const time_t *timep);
struct tm* localtime(const time_t *timep);
time_t mktime(struct tm *tm);
gmtime和localtime的参数以及返回值类型相同,区别是前者返回的格林威治标准时间,后者是当地时间.
注意: 这边三个函数都是线程不安全的, 要使用线程安全的版本, 需要使用带_r的版本 -- gmtime_r, localtime_r, mktime_r.
二、 延迟函数
主要的延迟函数有:sleep(),usleep(),nanosleep(),select(),pselect().
  1. unsigned int sleep(unsigned int seconds);
  2. void usleep(unsigned long usec);
  3. int nanosleep(const struct timespec *req, struct timespec *rem);
  4. int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,struct timeval *timeout);
  5. int pselect(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask);
alarm函数是信号方式的延迟,这种方式不直观,这里不说了。

仅通过函数原型中时间参数类型,可以猜测sleep可以精确到秒级,usleep/select可以精确到微妙级,nanosleep和pselect可以精确到纳秒级。
而实际实现中,linux上的nanosleep和alarm相同,都是基于内核时钟机制实现,受linux内核时钟实现的影响,并不能达到纳秒级的精度,man nanosleep也可以看到这个说明,man里给出的精度是:Linux/i386上是10 ms ,Linux/Alpha上是1ms。

URL: linux时间相关结构体和函数整理

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux时间相关结构体和函数整理 的相关文章

  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • Elasticsearch 无法写入日志文件

    我想激活 elasticsearch 的日志 当我运行 elasticsearch 二进制文件时 我意识到我在日志记录方面遇到问题 无法加载配置 这是输出 sudo usr share elasticsearch bin elasticse
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 如何根据 HTTP 请求使用 Python 和 Flask 执行 shell 命令并流输出?

    下列的这个帖子 https stackoverflow com questions 15092961 how to continuously display python output in a webpage 我能够tail f网页的日志
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 为什么 Linux perf 使用事件 l1d.replacement 来处理 x86 上的“L1 dcache misses”?

    在英特尔 x86 上 Linux用途 https stackoverflow com a 52172985 149138事件l1d replacements来实施其L1 dcache load misses event 该事件定义如下 计数
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • sendfile64 只复制约2GB

    我需要使用 sendfile64 复制大约 16GB 的文件 到目前为止我所取得的成就是 include
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp

随机推荐

  • python——迷宫问题总结

    关于迷宫问题 xff0c 常见会问能不能到达某点 xff0c 以及打印到达的最短路径 可以用回溯法 43 递归来解决 代码一 xff1a dfs 43 回溯 将矩阵外围以及路障统一设置为 1 设置current step和next step
  • (等待填坑)深度学习——蒸馏loss、蒸馏学习

    提出问题 参考博客 1 知识蒸馏 2 蒸馏
  • 图像篡改检测方向(Tamper Detection\ image forencis detection)学习笔记汇总(未完成)

    写在前面 最新在啃这个方向的论文 xff0c 零零总总找来了有几十篇 xff0c 目前自己也没看完 xff0c 下图中上面几行标星号的是自己打算多看几眼的 xff1a 这篇博客里会介绍几篇这个方向里做得比较好的几篇论文 demo工具 如果你
  • CELF优化的贪心算法

    用一个例子说明如下 xff1a 问题描述如下 xff1a 从一组节点中 xff0c 取出一组k个种子节点S xff0c 使得产生的增益最大 对任意的a属于A xff0c f a xff1a a加入之后的增益 有如下一个表 xff1a 初始扫
  • Linux磁盘分区基本分区

    目录 前言 一 磁盘简介 1 名词 2 类型 1 xff09 机械硬盘 2 xff09 固态硬盘 3 尺寸 4 接口 IDE和SATA的区别 5 术语 6 命名 7 分区方式 1 xff09 MBR 2 xff09 GPT 二 管理磁盘 1
  • 使用shell并发执行系统命令

    一 解决方案 旧方案为挨个执行shell exec xff0c 串行执行 xff0c 虽然执行很快 xff0c 奈何监听命令众多 xff0c redis连接有等待时间等 xff0c 有的还需要执行多次取平均值 xff0c 所以执行完已超过1
  • 基于C语言实现(WinForm)FIFA球队管理系统【100010337】

    1 引言 1 1 编写目的 在如今市场上 xff0c 各种评估分析类的软件层出不穷 作为当今世界上最受欢迎的球类之一 足球 xff0c 也以之为题材产生了世人所知的足球管理类游戏 xff0c FIFA足球经理 但是 xff0c 由于其占用内
  • Ubuntu18.04下CUDA10.x和TensorFlow1.x环境搭建(2019.7重编版)

    目录 前言开发环境一览 显卡驱动安装 下载驱动 禁用nouveau 安装驱动 安装CUDA 10 x第一个CUDA程序 安装cudnn7 x安装TensorFlow1 x最后 Mac和Ubuntu下修改pip源和TensorFlow CPU
  • 数通运营商方向常见面试问题(第五部分)

    VXLAN以主要应用在哪里 和传统的二层网络相比 xff0c 有什么优势7 数据中心 首先描述传统二层VPN的缺点 xff1a 传统二层要用STP 收敛慢 链路利用率低不合适 传统VPLS为解决环路会采用STP技术 xff0c CE到PE采
  • Xshell 6 首次连接虚拟机 CentOS 6.8报错:/usr/bin/xauth: file /root/.Xauthority does not exist

    首次连接虚拟机时会提示 usr bin xauth file root Xauthority does not exist xff0c xff0c 这个没关系 xff0c 系统在连接之后会自动创建 xff0c 再次连接时就好了 如下图 xf
  • 一个不喜欢读书的Javaer的读书单

    很可惜 xff0c 从我一开始学技术开始 xff0c 我就不喜欢看书 xff0c 严重的时候翻不到两页就会开始狂打瞌睡 很幸运 xff0c 有互联网能够为我提供很多知识 xff0c 甚至一些知识从网上看来的会更加权威一些 但是 xff0c
  • 【分享】Ubuntu桌面版图形界面下换源

    写在前面 xff1a 由于操作极其简单 xff0c 所以一开始还犹豫要不要单独写篇文章 xff0c 但是后来上网查了以下 xff0c 发现主流都是修改sources list文件的方法 xff08 这种方法的教程见下面的连接 xff0c 这
  • java 之产生死锁的必要条件

    1 死锁 怎么去打破 1 死锁发生的原因 是多个进程并发请求 争夺系统资源而产生的相互等待情况 2 本质问题 xff1a 1 系统资源有限 2 进程推进顺序不合理 3 死锁产生的4个必要条件 xff1a 3 1 进程互斥 资源分配给进程之后
  • MAC 安装tree : fatal error: 'stdlib.h' file not found

    MAC 安装tree fatal error 39 stdlib h 39 file not found 未安装 Command Line Tools命令行工具 xff0c 安装步骤如下 xff1a 在终端中输入 xcode select
  • blog记录

    blog记录 blog整理linux内核redis云 43 负载均衡算法git blog整理 linux内核 https blog csdn net gatieme article category 9265324 Linux内核剖析 xf
  • Git撤销&回滚操作(git reset 和 get revert)

    git 工作流 xff1a 工作区 xff1a 即自己当前分支所修改的代码 xff0c git add xx 之前的 xff01 不包括 git add xx 和 git commit xxx 之后的 暂存区 xff1a 已经 git ad
  • 51单片机——计数器与定时器的区别

    定时器和计数器是同一器件 计数器 其共同的特点是都有一个计数脉冲输入端 每输入一个脉冲 计数器就进行加1或减1计数 若计数器件的计数脉冲的频率固定 则可利用计数实现定时 这就是定时器 若计数器件的作用仅仅是记录输入脉冲的多少 则称为计数器
  • git学习笔记

    本地仓 lt gt 暂存区 lt gt 版本库 撤销 xff1a 已修改的文件test c xff0c 撤销 git checkout test c 必须要 xff0c 不然就会切换分支已修改的文件并使用 git add 添加到暂存区 gi
  • github提交代码-简介

    使用步骤 在 github 上 fork 一个项目到自己的仓库 需要先fork xff0c 因为原始项目没有权限git clone https github com name repos git 从自己的仓下 clone代码到本地修改本地代
  • linux时间相关结构体和函数整理

    一 时间类型 Linux下常用的时间类型有4个 xff1a time t xff0c struct timeb struct timeval xff0c struct timespec xff0c clock t struct tm 1 t