如何在Swift中读取/ dev / random

时间:2014-11-01 21:53:32

标签: random swift

我无法找到如何在Swift中打开文件的示例,特别是从/ dev / random读取真正的随机数到数组中。 感谢

2 个答案:

答案 0 :(得分:2)

要回答有关阅读文件的问题,您需要使用NSFileManager。 Swift没有自己的文件API。此外,您不能简单地打开文件;你需要使用文件处理程序,因为/dev/random将永远输出。

以下是一个例子:

let manager = NSFileManager.defaultManager()
let randomPath = "/dev/random"

if manager.fileExistsAtPath(randomPath) {
    let handle = NSFileHandle(forReadingAtPath: randomPath)

    if let validHandle = handle {
        let desiredLength = 256

        // Warning: Instead of returning NSData?, this method throws an exception if there's an error. Consider adding additional error handling.
        let fileData = validHandle.readDataOfLength(desiredLength)
        let fileString = NSString(data: fileData, encoding: NSASCIIStringEncoding)
        if (fileString != nil) {
            println(fileString!)
        }
    }   
}

控制台输出示例:

  

¬Ñ@< 4R-ÐÛÍäÓ - (*Âý3o÷ - »E2   @ AAX<øWýsñniâõãQüÕ£ÆsûÄÏþDÊU²OÑ9H)úûÓWhAóûoκfßpÍC%M¤ò«ÿ@' - gVüü]®%亚青{»J>一种©æ¨Zì¿¿Bþxû,«1'-£¾E¸Ju|`ëérßNeòWÙé-I#ê05¿   JF-EE«I =¤< 5E /p¨¾üæü5è«I%ãå.öŪ¿¯¨ôø+EeÅþUå5ì%ÿ¼pÕÊ:OD

那就是说,如果你的意图是在数组中加载随机数,你应该只使用arc4random_uniform(),这将返回一个均匀分布的随机数:

var randomNumbers = [Int]()

for i in 1...10 {
    randomNumbers.append(Int(arc4random_uniform(1000)))
}

println(randomNumbers)

示例输出:

  

[27,796,150,439,955,678,556,816,571,130]

答案 1 :(得分:1)

只是为了完整性:你可以在Swift中使用open / read / write / close,就像你在C中一样:

var array = [UInt8](count: 10, repeatedValue: 0)

let fd = open("/dev/random", O_RDONLY)
if fd != -1 {
    read(fd, &array, UInt(sizeofValue(array) * array.count))
    close(fd)
    println(array)
}