如何在Swift中读取/ dev/random

问题描述:

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

要回答关于阅读文件的问题,您需要使用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 =¤< 5ë/pü¾üæü5è«ãå.öŪ¿¯¨ôø+EeÅþUå5ì%ÿ¼pÕÊ:oÐ

也就是说,如果你的目的是加载在阵列中的随机数,你应该只使用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]

+0

谢谢!我在游乐场工作,我得到了你所得到的。 – 2014-11-01 22:12:31

+0

@Amanda_Panda太棒了!很高兴听到。 – 2014-11-01 22:13:20

Just fo r为了完整:您可以在C中使用与Swift中的open/read/write/close几乎相同的方法:

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) 
}