如何在OS X中使用目标c代码中的“nettop”获取网络统计信息?

时间:2013-11-18 12:17:20

标签: objective-c macos process

我需要以编程方式获取OS X中特定进程/应用程序发送和接收的字节数。

有这样做的命令行“nettop”。我想在我的代码中启动它并将结果返回到缓冲区(例如NSString),然后解析它。

作为示例,我使用了以下主题代码: Execute a terminal command from a Cocoa app

NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/usr/bin/nettop"];

NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];

NSFileHandle *file;
file = [pipe fileHandleForReading];

[task launch];

NSData *data;
data = [file readDataToEndOfFile];

NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog (@"result returned:\n%@", string);

问题是它返回空字符串。如何解决以下问题?

P.S。如果您知道/有示例代码如何获取每个进程的接收和发送字节数,请提供。

1 个答案:

答案 0 :(得分:2)

顺便说一句:你看过控制台了吗? 我收到了:Error opening terminal: unknown.

此消息已打印,因为您尝试以交互模式运行nettop。 但看起来nettop不支持非交互模式。因为使用top,一切都运行得很好,使用了以下设置:

[task setLaunchPath: @"/usr/bin/nettop"];
[task setArguments:@[@"-l1"]];

根据Google -l1以非交互模式运行它。使用top一切运行正常,但使用nettop它无法正常工作。