获取有关 Swift 中进程的信息
Getting information about process in Swift
我正在尝试获取有关 Swift 中进程的一些数据。
我使用这段代码作为起点:
pid_t pid = 10000;
rusage_info_current rusage;
if (proc_pid_rusage(pid, RUSAGE_INFO_CURRENT, (void **)&rusage) == 0)
{
cout << rusage.ri_diskio_bytesread << endl;
cout << rusage.ri_diskio_byteswritten << endl;
}
取自Per Process disk read/write statistics in Mac OS X。
但是,我无法将上面的代码转换为 Swift:
var usage = rusage_info_v3()
if proc_pid_rusage(100, RUSAGE_INFO_CURRENT, &usage) == 0
{
Swift.print("Success")
}
函数 prod_pid_rusage 需要一个类型为 rusage_info_t 的参数?,但我无法实例化该类型的实例。
是否可以使用Swift中的功能?
此致,
萨沙
与 C 一样,您必须获取 rusage_info_current
的地址
变量并将其转换为 proc_pid_rusage()
期望的类型。
在 Swift 中,这是使用 withUnsafeMutablePointer()
完成的
和 withMemoryRebound()
:
let pid = getpid()
var usage = rusage_info_current()
let result = withUnsafeMutablePointer(to: &usage) {
[=10=].withMemoryRebound(to: rusage_info_t?.self, capacity: 1) {
proc_pid_rusage(pid, RUSAGE_INFO_CURRENT, [=10=])
}
}
if result == 0 {
print(usage.ri_diskio_bytesread)
// ...
}
你必须添加
#include <libproc.h>
到桥接头文件以使其编译。
我正在尝试获取有关 Swift 中进程的一些数据。 我使用这段代码作为起点:
pid_t pid = 10000;
rusage_info_current rusage;
if (proc_pid_rusage(pid, RUSAGE_INFO_CURRENT, (void **)&rusage) == 0)
{
cout << rusage.ri_diskio_bytesread << endl;
cout << rusage.ri_diskio_byteswritten << endl;
}
取自Per Process disk read/write statistics in Mac OS X。
但是,我无法将上面的代码转换为 Swift:
var usage = rusage_info_v3()
if proc_pid_rusage(100, RUSAGE_INFO_CURRENT, &usage) == 0
{
Swift.print("Success")
}
函数 prod_pid_rusage 需要一个类型为 rusage_info_t 的参数?,但我无法实例化该类型的实例。 是否可以使用Swift中的功能?
此致, 萨沙
与 C 一样,您必须获取 rusage_info_current
的地址
变量并将其转换为 proc_pid_rusage()
期望的类型。
在 Swift 中,这是使用 withUnsafeMutablePointer()
完成的
和 withMemoryRebound()
:
let pid = getpid()
var usage = rusage_info_current()
let result = withUnsafeMutablePointer(to: &usage) {
[=10=].withMemoryRebound(to: rusage_info_t?.self, capacity: 1) {
proc_pid_rusage(pid, RUSAGE_INFO_CURRENT, [=10=])
}
}
if result == 0 {
print(usage.ri_diskio_bytesread)
// ...
}
你必须添加
#include <libproc.h>
到桥接头文件以使其编译。