当前位置: 首页 > news >正文

Linux C编程基础:获取时间

1.前言

对于linux下的编程,无论是用户态还是内核态,时间获取都是经常需要使用到的。以下分别从用户态和内核态整理了几个常用的时间获取接口,供编写代码时快速查阅。

2.用户态获取时间

  • 2.1 clock_gettime()
#include <time.h>int clock_gettime (clockid_t __clock_id, struct timespec *__tp);
  • 作用:根据系统时钟的类型,获取当前时间
  • __clock_id:系统时钟的类型。常用取值:
    • CLOCK_REALTIME: 从1970年1月1日到目前的时间
    • CLOCK_MONOTONIC: 系统启动时间
    • CLOCK_PROCESS_CPUTIME_ID: 本进程运行时间
    • CLOCK_THREAD_CPUTIME_ID: 本线程运行的时间
  • __tp: 存放当前的时间。
  • 返回值:成功则返回0,失败则返回-1

timespec结构体:

struct timespec
{__time_t tv_sec;  /* Seconds. 秒 */__syscall_slong_t tv_nsec; /* Nanoseconds.  纳秒*/
};

示例:

#include <stdio.h>
#include <string.h>
#include <time.h>long long get_clock_sys_time_ns(void)
{struct timespec tp;long long time_ns = 0;clock_gettime(CLOCK_MONOTONIC, &tp);time_ns = (long long)tp.tv_sec * 1000000000 + tp.tv_nsec;return time_ns;
}int main(void)
{struct timespec tp;///< 获取从1970年1月1日到目前的时间memset(&tp, 0, sizeof(struct timespec));clock_gettime(CLOCK_REALTIME, &tp);printf("clock_id = CLOCK_REALTIME, sec = %ld, nsec = %ld\n", tp.tv_sec, tp.tv_nsec);///< 获取系统启动时间memset(&tp, 0, sizeof(struct timespec));clock_gettime(CLOCK_MONOTONIC, &tp);printf("clock_id = CLOCK_MONOTONIC, sec = %ld, nsec = %ld, sys_time = %lld ns\n", tp.tv_sec, tp.tv_nsec, get_clock_sys_time_ns());///< 获取本进程运行时间memset(&tp, 0, sizeof(struct timespec));clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &tp);printf("clock_id = CLOCK_PROCESS_CPUTIME_ID, sec = %ld, nsec = %ld\n", tp.tv_sec, tp.tv_nsec);///< 获取本线程运行时间memset(&tp, 0, sizeof(struct timespec));clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp);printf("clock_id = CLOCK_THREAD_CPUTIME_ID, sec = %ld, nsec = %ld\n", tp.tv_sec, tp.tv_nsec);return 0;
}
  • 2.2.gettimeofday()
#include <sys/time.h>int gettimeofday(struct timeval *tv, struct timezone *tz);
  • 作用:获取当前时间(从1970年1月1日到目前的时间)
  • tv:当前UTC时间
  • tz:当前时区信息
  • 返回值:成功则返回0,失败则返回-1

timeval结构体:

struct timeval
{__time_t tv_sec;  /* Seconds.  秒*/__suseconds_t tv_usec; /* Microseconds.  微秒*/
};

timezone结构体:

struct timezone{int tz_minuteswest;  /* Minutes west of GMT. 和Greenwich时间差了多少分钟 */int tz_dsttime;  /* Nonzero if DST is ever in effect. 日光节约时间的状态  */};

示例:

#include <stdio.h>
#include <string.h>
#include <sys/time.h>long long get_sys_time_ms(void)
{long long time_ms = 0;struct timeval tv;gettimeofday(&tv, NULL);time_ms = ((long long)tv.tv_sec*1000000 + tv.tv_usec) / 1000;return time_ms;
}int main(void)
{///< 获取系统时间printf("sys_time = %lld ms\n", get_sys_time_ms());return 0;
}
  • 2.3.time()
#include <time.h>time_t time(time_t *tloc);
  • 作用:获取1970-01-01 00:00:00 +0000至今的秒数(UTC)
  • tloc:返回的秒存储指针
  • 返回值:成功则返回秒数,失败则返回-1,错误原因存在errno中。

time_t的类型:

typedef long time_t;

示例:

#include <stdio.h>
#include <time.h>time_t get_utc_time(void)
{return time(NULL);
}int main(int argc, char **argv)
{time_t utc_time = get_utc_time();printf("utc_time = %ld s\n", utc_time);return 0;
}
  • 2.4.localtime()
#include <time.h>struct tm *localtime(const time_t *timep);
  • 作用:将time_t类型的时间转换为struct tm类型的时间
  • timep:当前UTC秒数
  • 返回值:返回当地时间

tm结构体:

struct tm
{int tm_sec;   /* Seconds. [0-60] (1 leap second) */int tm_min;   /* Minutes. [0-59] */int tm_hour;   /* Hours. [0-23] */int tm_mday;   /* Day.  [1-31] */int tm_mon;   /* Month. [0-11] 注意:0代表1月,以此类推*/int tm_year;   /* Year - 1900.  该值为实际年份减去1900*/int tm_wday;   /* Day of week. [0-6] 注意:0代表星期一,以此类推*/int tm_yday;   /* Days in year.[0-365] 从每年的1月1日开始的天数,其中0代表1月1日,以此类推*/int tm_isdst;   /* DST.  [-1/0/1] 夏玲时标识符*/
};

示例:

#include <stdio.h>
#include <time.h>time_t get_utc_time(void)
{return time(NULL);
}int main(int argc, char **argv)
{time_t utc_time = get_utc_time();printf("utc_time = %ld s\n", utc_time);struct tm *local_tm = localtime(&utc_time); printf("local time = %.4d-%.2d-%.2d %.2d:%.2d:%.2d\n", local_tm->tm_year + 1900,local_tm->tm_mon + 1,local_tm->tm_mday,local_tm->tm_hour,local_tm->tm_min,local_tm->tm_sec);return 0;
}
  • 2.5.localtime_r()
#include <time.h>struct tm *localtime_r(const time_t *timep, struct tm *result);
  • 作用:将time_t类型的时间转换为struct tm类型的时间
  • timep:当前UTC秒数
  • result:当地时间
  • 返回值:返回当地时间

注:
localtime不是一个线程安全的函数。对于实时性要求较高的系统,多个线程同时调用localtime,可能会造成数据被覆盖。使用localtime_r来替代。

示例:

#include <stdio.h>
#include <time.h>time_t get_utc_time(void)
{return time(NULL);
}int main(int argc, char **argv)
{time_t utc_time = get_utc_time();printf("utc_time = %ld s\n", utc_time);struct tm result;struct tm *local_tm = localtime_r(&utc_time, &result); printf("local time = %.4d-%.2d-%.2d %.2d:%.2d:%.2d\n", local_tm->tm_year + 1900,local_tm->tm_mon + 1,local_tm->tm_mday,local_tm->tm_hour,local_tm->tm_min,local_tm->tm_sec);printf("result time = %.4d-%.2d-%.2d %.2d:%.2d:%.2d\n", result.tm_year + 1900,result.tm_mon + 1,result.tm_mday,result.tm_hour,result.tm_min,result.tm_sec);return 0;
}
  • 2.6.gmtime()
#include <time.h>struct tm *gmtime(const time_t *timep);
  • 作用:返回tm结构的GMT时间(UTC时间)
  • timep:当前UTC秒数
  • 返回值:返回当地时间

例子:

#include <stdio.h>
#include <time.h>time_t get_utc_time(void)
{return time(NULL);
}int main(int argc, char **argv)
{time_t utc_time = get_utc_time();printf("utc_time = %ld s\n", utc_time);struct tm *gmt_tm = gmtime(&utc_time); printf("gmt time = %.4d-%.2d-%.2d %.2d:%.2d:%.2d\n", gmt_tm->tm_year + 1900,gmt_tm->tm_mon + 1,gmt_tm->tm_mday,gmt_tm->tm_hour,gmt_tm->tm_min,gmt_tm->tm_sec);return 0;
}

localtime和gmtime的区别:
localtime和gmtime都是C语言中的函数,用于将time_t类型的时间转换为struct tm类型的时间。它们的区别在于,gmtime将time_t转换为UTC时间,即世界标准时间,而localtime将time_t转换为本地时间。
例子:使用gmtime与localtime接口返回的小时数来计算当地时区

#include <stdio.h>
#include <time.h>time_t get_utc_time(void)
{return time(NULL);
}int main(int argc, char **argv)
{time_t utc_time = get_utc_time();printf("utc_time = %ld s\n", utc_time);struct tm *gmt_tm = gmtime(&utc_time); printf("gmt time = %.4d-%.2d-%.2d %.2d:%.2d:%.2d\n", gmt_tm->tm_year + 1900,gmt_tm->tm_mon + 1,gmt_tm->tm_mday,gmt_tm->tm_hour,gmt_tm->tm_min,gmt_tm->tm_sec);int gmt_hour = gmt_tm->tm_hour;struct tm *local_tm = localtime(&utc_time); printf("local time = %.4d-%.2d-%.2d %.2d:%.2d:%.2d\n", local_tm->tm_year + 1900,local_tm->tm_mon + 1,local_tm->tm_mday,local_tm->tm_hour,local_tm->tm_min,local_tm->tm_sec);int local_hour = local_tm->tm_hour;int local_time_zone = local_hour - gmt_hour;if (local_time_zone < -12) {local_time_zone += 24; } else if (local_time_zone > 12) {local_time_zone -= 24;}else{}printf("local_time_zone = %d\n", local_time_zone);return 0;
}

3.内核态获取时间

  • 3.1.do_gettimeofday()(比较老的函数,新内核可能不存在了)
#include <linux/time.h> void do_gettimeofday(struct timeval *tv);
  • 作用:与C标准库中gettimeofday()用法相同
  • tv:当前UTC时间

timeval结构体:

struct timeval
{__time_t tv_sec;  /* Seconds.  秒*/__suseconds_t tv_usec; /* Microseconds.  微秒*/
};

示例:

#include <linux/module.h>
#include<linux/time.h>
MODULE_LICENSE("GPL");int __init do_gettimeofday_init(void)
{printk("do_gettimeofday test begin.\n");struct timeval now={.tv_sec=0,.tv_usec=0};            //声明一个变量do_gettimeofday(&now); //调用函数获取时间,此时间是距离1970-01-01 00:00:00的时间/*显示当前时间差*/printk("the seconds of the day is: %ld\n", now.tv_sec);       //秒数printk("the microseconds of the day is: %ld\n", now.tv_usec); //微秒数printk("do_gettimeofday test over.\n");return 0;
}void __exit do_gettimeofday_exit(void)
{printk("Goodbye do_gettimeofday test\n");
}module_init(do_gettimeofday_init);
module_exit(do_gettimeofday_exit);
  • 3.2.基于ktime_t格式的时间
    参考:linux kernel时钟获取

    1. ktime_get()
    #include "linux/ktime.h"ktime_t ktime_get(void);
    

    作用:获取的是CLOCK_MONOTONIC时间。通过ktime_get获取的时间是不统计设备休眠时间的,并且这个时间统计的起始点则是设备启动后。
    返回值:返回ktime_t格式的数据类型,单位为纳秒。

    ktime_t的定义:

    typedef s64	ktime_t;
    

    示例:

    time_test_drv_init
    ktime_t curTime = 0;
    curTime = ktime_get();
    TIME_TEST_INFO("ktime_get:%lld ns", curTime);
    
    1. ktime_get_ts64()
    #include "linux/time64.h"void ktime_get_ts64(struct timespec64 *ts)

    作用:和ktime_get的功能是完全一样的,区别在于对时间的表示数据类型由ktime_t变成了timespec64。

    timespec64的定义如下:

    struct timespec64 {time64_t	tv_sec;			/* seconds */long		tv_nsec;		/* nanoseconds */
    };
    

    timespec64中包含了秒和纳秒,相对ktime_t纳秒这个时间表示更加适合人类查看.

    示例:

    static void show_time_ts64(const char* caller, const int line, const struct timespec64 *curTimeTs)
    {pr_info("%s,%d:%lld s %ld ns\n", caller, __LINE__, curTimeTs->tv_sec, curTimeTs->tv_nsec);
    }time_test_drv_init
    struct timespec64 curTimeTs;
    ktime_get_boottime_ts64(&curTimeTs);
    show_time_ts64(__func__, __LINE__, &curTimeTs);
    
  • 3.ktime_get_boottime()

    static inline ktime_t ktime_get_boottime(void);
    

    作用:ktime_get_boottime获取的时间和ktime_get最大的不同是其包含了设备进入休眠的时间,其这个时间统计的起始点也是设备启动后。
    返回值:返回值类型为ktime_t,单位为纳秒。

    示例:

    time_test_drv_init
    ktime_t curTime = 0;
    curTime = ktime_get_boottime();
    TIME_TEST_INFO("ktime_get_boottime:%lld ns", curTime);
    
  • 4.ktime_get_boottime_ts()

    void ktime_get_boottime_ts64(struct timespec64 *)

    作用:ktime_get_boottime_ts相对于ktime_get_boottime的功能是完全一样的,区别在于对时间的表示数据类型由ktime_t变成了timespec64。

  • 5.ktime_get_real()

    ktime_t ktime_get_real(void);
    

    作用:ktime_get_real获取的时间的起点不是设备的启动时间点了,而是相对UTC的,即从1970开始。
    示例:

    time_test_drv_init
    ktime_t curTime = 0;
    curTime = ktime_get_real();
    TIME_TEST_INFO("ktime_get_real:%lld ns", curTime);
    
  • 6.ktime_get_real_ts()

    void ktime_get_real_ts(struct timespec64 *)

    作用:ktime_get_real_ts相对于ktime_get_real的功能是完全一样的,区别在于对时间的表示数据类型由ktime_t变成了timespec64。
    示例:

    time_test_drv_init
    struct timespec64 curTimeTs;
    ktime_get_real_ts64(&curTimeTs);
    

4.延时函数的实现

void delay_us(uint32_t nus)
{volatile uint32_t startts, endts, ts;ts = nus;startts = get_time_us();endts = startts + ts;if (endts > startts){while (get_time_us() < endts);}else{while (get_time_us() > endts);while (get_time_us() < endts);}
}

相关文章:

Linux C编程基础:获取时间

1.前言 对于linux下的编程&#xff0c;无论是用户态还是内核态&#xff0c;时间获取都是经常需要使用到的。以下分别从用户态和内核态整理了几个常用的时间获取接口&#xff0c;供编写代码时快速查阅。 2.用户态获取时间 2.1 clock_gettime() #include <time.h>int c…...

Spring核心注解

1、Bean注解 作用&#xff1a;用于把当前方法的返回值作为bean对象存入spring的ioc容器中位置: 一般出现在方法上面属性: name:用于指定bean的id。当不写时&#xff0c;默认值是当前方法的名称细节&#xff1a;当我们使用注解配置方法时&#xff0c;如果方法有参数&#xff0c;…...

哈希表原理,以及unordered_set/和unordered_map的封装和迭代器的实现

哈希表 unordered系列unordered_set和unordered_map的使用哈希哈希概念哈希冲突哈希函数闭散列开散列哈希表的扩容哈希表源码&#xff08;开散列和闭散列&#xff09; 封装unordered_set/和unordered_map&#xff0c;以及实现迭代器节点定义unordered_set定义unordered_map定义…...

如何把歌曲里的伴奏音乐提取出来,分享几个方法给大家!

对于一首歌&#xff0c;我们都知道&#xff0c;它有两部分组成&#xff1a;背景音乐人声。这两者合在一起&#xff0c;便是我们经常听的歌。部分用户想要直接获取歌曲伴奏&#xff0c;那么可以在UU伴奏网上下载。 操作方法比较简单&#xff0c;直接搜索想要的歌曲名称就可以了…...

区块链产业快速发展 和数集团开启区块链应用新时代

UTONMOS区块链游戏要来了。 就在5月底&#xff0c;UTONMOS品牌所属公司上海和数集团在泰国发布了【神念无界】系列的多款国际版链游&#xff0c;包括【神念无界-源起山海】、【北荒传奇】、【神宠岛】、【神农园】等区块链游戏。 以【神念无界-源起山海】为例&#xff0c;其是…...

初出茅庐的小李博客之常见字符串函数使用

C语言字符数组与字符串数组 在C语言中&#xff0c;字符数组和字符串数组实际上是同一种类型。字符串是由字符组成的字符数组&#xff0c;通常以空字符 ‘\0’ 结尾。C语言中的字符串是一种常见的数据类型。我们可以通过两种方式定义字符数组跟字符串数组 char charArray[10];…...

运筹学工程化流程和常见的运筹学算法分类以及常见软件

文章目录 前言运筹学工程化流程运筹学算法分类运筹学软件参考文献 前言 自2023年初新冠疫情管控放开后&#xff0c;各家公司各类岗位的人员都有被裁的消息传出&#xff0c;但用人市场上运筹学算法岗位却反其道行之&#xff0c;用工出现了激增。可以预见的是数据算法将从传统的…...

JAVA面向对象(三)

第三章 封装与继承 目录 第三章 封装与继承 1.1.封装 1.2.包 1.3.访问权限控制 1.4.static修饰符 1.4.1.成员变量 1.4.2.成员方法 1.4.3.代码块 总结 内容仅供学习交流&#xff0c;如有问题请留言或私信&#xff01;&#xff01;&#xff01;&#xff01;&#xff0…...

前端面试题---跨域处理和异常、错误处理

一.跨域处理 在前端开发中&#xff0c;当我们在浏览器中向不同域名或端口发起请求时&#xff0c;就会遇到跨域请求的限制。为了处理跨域请求&#xff0c;有几种常见的方法 1.JSONP&#xff08;JSON with Padding&#xff09; JSONP是一种利用 <script> 标签可以跨域加载…...

网络安全之反序列化漏洞分析

简介 FastJson 是 alibaba 的一款开源 JSON 解析库&#xff0c;可用于将 Java 对象转换为其 JSON 表示形式&#xff0c;也可以用于将 JSON 字符串转换为等效的 Java 对象分别通过toJSONString和parseObject/parse来实现序列化和反序列化。 使用 对于序列化的方法toJSONStrin…...

19 贝叶斯线性回归

文章目录 19 贝叶斯线性回归19.1 频率派线性回归19.2 Bayesian Method19.2.1 Inference问题19.2.2 Prediction问题 19 贝叶斯线性回归 19.1 频率派线性回归 数据与模型&#xff1a; 样本&#xff1a; { ( x i , y i ) } i 1 N , x i ∈ R p , y i ∈ R p {\lbrace (x_i, y_…...

第七十天学习记录:高等数学:微分(宋浩板书)

微分的定义 基本微分公式与法则 复合函数的微分 微分的几何意义 微分在近似计算中应用 sin(xy) sin(x)cos(y) cos(x)sin(y)可以用三角形的几何图形来进行证明。 假设在一个单位圆上&#xff0c;点A(x,y)的坐标为(x,y)&#xff0c;点B(x’, y’)的坐标为(x’, y’)。则以两点…...

Jmeter

目录 一、jmeter 安装 二、jmeter 介绍 1、jmeter是什么&#xff1f; 2、jmeter 用来做什么&#xff1f; 3、优点 4、缺点 5、jmeter 目录介绍 ①_bin 目录介绍 ② docs 目录 — — 接口文档目录 ③ extras目录 — — 扩展插件目录 ④ lib 目录 — — 所用到的插件目录 ⑤ lic…...

Flutter 学习 之 时间转换工具类

Flutter 学习之时间转换工具类 在 Flutter 应用程序开发中&#xff0c;处理时间戳是非常常见的需求。我们通常需要将时间戳转换为人类可读的日期时间格式。为了实现这一点&#xff0c;我们可以创建一个时间转换工具类。 实现方法 以下是一个简单的时间转换工具类的示例&…...

docker consul

docker consul的容器服务更新与发现 服务注册与发现是微服务架构中不可或缺的重要组件&#xff0c;起始服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的承载压力&#xff0c;服务之间调用单纯的通过接口访问的&#xff0c;直到后来出现多个节点的分布式…...

全志V3S嵌入式驱动开发(开发环境再升级)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们陆陆续续开发了差不多有10个驱动&#xff0c;涉及到网口、串口、音频和视频等几个方面。但是整个开发的效率还是比较低的。每次开发调试的…...

ChatGPT:人工智能助手的新时代

ChatGPT&#xff1a;人工智能助手的新时代 文章目录 ChatGPT&#xff1a;人工智能助手的新时代引言ChatGPT的原理GPT-3.5架构概述预训练和微调过程生成式对话生成技术 ChatGPT的应用场景智能助理客服机器人虚拟角色教育辅助创意生成个性化推荐 ChatGPT的优势ChatGPT的使用技巧与…...

【面试】二、Java补充知识

JVM中的存储 JVM的五块存储区&#xff1a; 方法区&#xff08;线程共享&#xff09; 方法区用来存储类的各种信息&#xff08;类名、方法信息等&#xff09;、静态变量、常量和编译后的代码也存储在方法区中 方法区中也存在运行时常量池 ​ 常量池中会存放程序运行时生成的各种…...

LISTENER、TNSNAMES和SQLNET配置文件

LISTENER、TNSNAMES和SQLNET配置文件 用户连接验证listener.ora文件配置监听日志local_listener参数 tnsnames.ora文件配置 sqlnet.ora文件配置 用户连接验证 Oracle数据库中用户有三种常见的登录验证方式&#xff1a; 通过操作系统用户验证&#xff1a;必须是在数据库服务器…...

【Leetcode -225.用队列实现栈 -232.用栈实现队列】

Leetcode Leetcode -225.用队列实现栈Leetcode -232.用栈实现队列 Leetcode -225.用队列实现栈 题目&#xff1a;仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 …...

悟道3.0全面开源!LeCun VS Max 智源大会最新演讲

夕小瑶科技说 原创 作者 | 小戏 2023 年智源大会如期召开&#xff01; 这场汇集了 Geoffery Hinton、Yann LeCun、姚期智、Joseph Sifakis、Sam Altman、Russell 等一众几乎是 AI 领域学界业界“半壁江山”的大佬们的学术盛会&#xff0c;聚焦 AI 领域的前沿问题&#xff0c…...

2023蓝桥杯大学A组C++决赛游记+个人题解

Day0 发烧了一晚上没睡着&#xff0c;感觉鼻子被打火机烧烤一样难受&#xff0c;心情烦躁 早上6点起来吃了个早饭&#xff0c;思考能力完全丧失了&#xff0c;开始看此花亭奇谭 看了六集&#xff0c;准备复习数据结构考试&#xff0c;然后秒睡 一睁眼就是下午2点了 挂了个…...

wkhtmltopdf踩坑记录

1. 不支持writing-mode。 需求是文字纵向排列&#xff0c;内容从左到右&#xff0c;本来用的是writing-mode: tb-rl;&#xff0c;插件转pdf后发现失效。 解决方法&#xff1a; 让每一列文字单独用一个div容器包裹&#xff0c;对它的宽度进行限制&#xff0c;控制每一行只能出现…...

贪心算法part2 | ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

文章目录 122.买卖股票的最佳时机II思路思路代码官方题解困难 55. 跳跃游戏思路思路代码官方题解代码困难 45.跳跃游戏II思路思路代码困难 今日收获 122.买卖股票的最佳时机II 122.买卖股票的最佳时机II 思路 局部最优&#xff1a;将当天价格和前一天比较&#xff0c;价格涨…...

[C++]异常笔记

我不怕练过一万种腿法的对手,就怕将一种腿法 练一万次的对手。 什么是C的异常 在C中&#xff0c;异常处理通常使用try-catch块来实现。try块用于包含可能会抛出异常的代码&#xff0c;而catch块用于捕获并处理异常。当异常被抛出时&#xff0c;程序会跳过try块中未执行…...

浅谈一级机电管道设计中的压力与介质温度

管道设计是工程设计中的一个非常重要的部分&#xff0c;管道的设计需要考虑到许多因素&#xff0c;其中就包括管道设计压力分类和介质温度分类。这两个因素是在设计管道时必须非常严格考虑的&#xff0c; 首先是管道设计压力分类。在管道设计中&#xff0c;根据工作要求和要传输…...

Docker网络模型(八)使用 macvlan 网络

使用 macvlan 网络 一些应用程序&#xff0c;特别是传统的应用程序或监控网络流量的应用程序&#xff0c;期望直接连接到物理网络。在这种情况下&#xff0c;你可以使用 macvlan 网络驱动为每个容器的虚拟网络接口分配一个MAC地址&#xff0c;使其看起来像一个直接连接到物理网…...

控制视图内容的位置

文本域中的提示内容在默认情况下是垂直居中的&#xff0c;要改变文本在文本域中的位置&#xff0c;可以使用android:gravity来实现。 利用android:gravity可以指定如何在视图中放置视图内容&#xff0c;例如&#xff0c;如何在文本域中放置文本。 如果希望视图文本显示在上方&a…...

【分布式系统与一致性协议】

分布式系统与一致性协议 CAP原理APCPCA总结BASE理论 一致性拜占庭将军问题 分布式系统是一个硬件或软件组件分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统。 分布式系统的设计目标一般包含如下&#xff1a; 可用性&#xff1a;可用性是分…...

音视频领域的未来发展方向展望

文章目录 音视频领域的未来发展方向全景音视频技术虚拟现实和增强现实的区别 人工智能技术可视化智能分析智能语音交互图像识别和视频分析技术 语音处理智能推荐技术远程实时通信 流媒体技术未来方向 音视频领域的未来发展方向 全景音视频技术&#xff1a;全景音视频技术是近年…...

国内最大的自建站平台/百度健康

2019独角兽企业重金招聘Python工程师标准>>> 硬件内部计时器精度 US级别 #include<iostream> #include "functional" #include "windows.h" using namespace std;#include <WinBase.h> long long calculateMS(std::function<vo…...

两个网站链接如何做/国内最好的危机公关公司

1、什么是JavaScript 1.1、概述 JavaScript是一门世界上最流行的脚本语言。 Java与JavaScript关系&#xff1a;可以说除了名字&#xff0c;毫无关系 一个合格的后端人员&#xff0c;必须要精通JavaScript 1.2、 历史 https://blog.csdn.net/kese7952/article/details/793…...

wordpress把文章标题放进url/上海sem

目录概念特征选择ID3 算法C4.5 算法CART 算法剪枝概念 决策树算法采用树形结构&#xff0c;使用层层推理来实现最终的分类 决策树是一个包含根节点、内部节点和叶节点的树结构&#xff0c;其根节点包含样本全集&#xff0c;内部节点对应特征属性测试&#xff0c;叶节点则代表…...

好用的ppt模板网站免费/广告软文

防火墙概述和产品线 网络防火墙是什么&#xff1f; 网络防火墙是一个链接两个或多个网络区域&#xff0c;并且给予策略限制区域间流量的设备。 百度百科的基本定义&#xff1a; 所谓”防火墙” 是指一种将内部网和公众访问网&#xff08;如Internet&#xff09;分开的方法&a…...

珠海正规网站制作排名费用多少/2022年免费云服务器

WKWebview Demo在这 先来个最直观的&#xff0c;为什么要用WKWebview 这里分别用WKWebview 和UIWebview加载了一个百度的网页,内存的占用情况如下 WKWebviewUIWebview相比之下&#xff0c;WKWebView占用20M&#xff0c;而UIWebView占用73M&#xff0c;这性能提升的不只一点点。…...

如何建设网站并与数据库相连/关键词排名点击

centos 7 虚拟化支持&#xff1a;1、更高性能的KVM内核虚拟化支持2、嵌套虚拟化支持&#xff0c;可以在KVM中安装配置OpenStack3、继续支持作为虚拟机的Xen技术&#xff0c;但不再支持作为寄主机的Xen技术4、加强了对VMWARE的技术支持&#xff0c;自带open-vm-tools替换vm-tool…...