如何在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]
答
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)
}
谢谢!我在游乐场工作,我得到了你所得到的。 – 2014-11-01 22:12:31
@Amanda_Panda太棒了!很高兴听到。 – 2014-11-01 22:13:20