2017-08-10 1 views
0

私は(MacOSの上)のシステム情報を読み込むアプリケーションを作成しようとしているを取得し、私はそうのようなsysctl STRINGSを読むことができました:スウィフトsysctlの整数

func cpu() -> String { 
    var size = 0 
    sysctlbyname("machdep.cpu.brand_string", nil, &size, nil, 0) 
    var machine = [CChar](repeating: 0, count: Int(size)) 
    sysctlbyname("machdep.cpu.brand_string", &machine, &size, nil, 0) 
    return String(cString: machine) 

} 

を私は整数を読み込むしようとすると、ようにhw.cpufrequencyのように:

func cpuFreq() -> String { 
    var size = 0 
    sysctlbyname("hw.cpufrequency", nil, &size, nil, 0) 
    var machine = [CChar](repeating: 0, count: Int(size)) 
    sysctlbyname("hw.cpufrequency", &machine, &size, nil, 0) 
    return String(cString: machine) 

} 

これは絶対に何も、任意の手がかりを返しますか?

答えて

1

あなたのコードは、戻り値が文字列であると仮定していますが、そうではありません。実際には整数です。ターミナルのsysctl(3)[man 3 sysctlと入力してください]のマニュアルページを見ると、 "hw.cpufrequency"はInt64_tをCで返します。これはSwiftのInt64に変換されます。だから、値を文字列ではなくInt64に読み込みたいとします。あなたは次のようにすることができます:

func cpuFreq() throws -> Int64 { 
    var frequency: Int64 = 0 
    var size = MemoryLayout<Int64>.size 

    if sysctlbyname("hw.cpufrequency", &frequency, &size, nil, 0) != 0 { 
     throw POSIXError.Code(rawValue: errno).map { POSIXError($0) } ?? CocoaError(.fileReadUnknown) 
    } 

    return frequency 
} 
関連する問題