返回介绍

08.5.4 从 /dev/random 中读取

发布于 2024-08-14 12:50:32 字数 4472 浏览 0 评论 0 收藏 0

在本节中,你将学习如何从/dev/random系统设备读取数据。/dev/random系统设备的目的是生成随机数据,你可以使用这些数据来测试程序,或者,在本例中,你将为随机数生成器生成随机数种子。从/dev/random获取数据可能有些棘手,这也是要在这里特别讨论它的主要原因。

macOS High Sierra机器上,/dev/random文件具有如下的权限:

$ ls -l /dev/random
crw-rw-rw-  1 root  wheel   14,   0  Jan 8 20:24 /dev/random

同样,在Debian Linux机器上,/dev/random系统设备具有如下的Unix文件权限:

$ ls -l /dev/random
crw-rw-rw-  1 root  root   1,   8  Jan 13 12:19 /dev/random

这意味着/dev/random文件在这两种Unix变体系统上具有类似的文件权限。惟一区别是它们的文件组权限不同,macOSwheelDebian Linux上是root

本节主题的程序是devRandom.go,分为三部分。第一部分代码如下:

package main

import (
    "encoding/binary"
    "fmt"
    "os"
)

为了从dev/random中读取数据,需要引入encoding/binary标准包,因为/dev/random返回二进制数据,需要解码。

devRandom.go第二部分代码如下:

func main() {
    f, err := os.Open("/dev/random")
    defer f.Close()

    if err != nil {
        fmt.Println(err)
        return
    }

和以往一样,打开/dev/random,因为Unix中一切皆是文件。

devRandom.go最后一部分代码如下:

    var seed int64
    binary.Read(f, binary.LittleEndian, &seed)
    fmt.Println("Seed:", seed)
}

调用binary.Read()函数从/dev/random系统设备中读取数据, binary.Read()函数需要三个参数:第二个参数(binary.LittleEndian)指定了小端字节序,另一个选项是binary.BigEndian,在计算机使用大端字节序时使用。

执行devRandom.go得到如下输出:

$ go run devRandom.go
Seed: -2044736418491485077
$ go run devRandom.go
Seed: -517485437251490328
$ go run devRandom.go
Seed: 7702177874251412774

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文