linux系统时间每次开机都不一致的问题

本文介绍了解决Linux系统中时间偏差的问题。通过调整系统时间和硬件时间的一致性来修正开机后的时钟误差,确保开机时间准确。

问题导读:

使用date -s修改过时间,可是每次开机后时间都不对。 貌似还是有规律的,总是会比windows系统时间慢两个小时左右。


原因分析:

网上查资料后发现,linux系统时间和硬件时间不一致引起的。


解决方法:

查看系统时间:

hwclock 

查看硬件时间:

hwclock --localtime



发现系统时间比硬件时间快了八个小时。

查看硬件时间的设置方式:

[root@hadoop002 ~]# vi /etc/sysconfig/clock 

发现没有UTC的设置,可能默认为true。

修改为false


发现系统时间比硬件时间快了

8

个小时

保存退出即可。


这时先修改系统时间


使用 hwclock --systohc命令将系统时间写入BOIS硬件时间。



之后重启系统,开机后会读取bois时间作为系统时间。

问题就解决了。

`srand` 的随机数种子并非只能设置为时间。`srand` 函数的原型为 `void srand (unsigned int seed);`,其参数 `seed` 是一个无符号整数,只要是合法的无符号整数值都可以作为种子,例如程序的进程 ID、用户输入的值、文件的大小等。 对于 Linux 系统每次开机系统时间一致导致 `srand` 生成随机数相同的问题,可以采用以下几种解决办法: #### 1. 使用进程 ID 进程 ID 在每次程序运行时都是同的,可以将其作为随机数种子。示例代码如下: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { srand(getpid()); for (int i = 0; i < 5; i++) { printf("%d ", rand()); } printf("\n"); return 0; } ``` #### 2. 结合多个因素 可以将系统时间、进程 ID 等多个因素组合起来作为种子,增加种子的随机性。示例代码如下: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> int main() { srand(time(NULL) ^ getpid()); for (int i = 0; i < 5; i++) { printf("%d ", rand()); } printf("\n"); return 0; } ``` #### 3. 读取系统熵池 在 Linux 系统中,可以通过读取 `/dev/urandom` 设备文件来获取随机数据。示例代码如下: ```c #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> int main() { int fd = open("/dev/urandom", O_RDONLY); if (fd == -1) { perror("open"); return 1; } unsigned int seed; ssize_t bytes_read = read(fd, &seed, sizeof(seed)); if (bytes_read != sizeof(seed)) { perror("read"); close(fd); return 1; } close(fd); srand(seed); for (int i = 0; i < 5; i++) { printf("%d ", rand()); } printf("\n"); return 0; } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值