fdh*_*fdh 1 c unix macos cocoa objective-c
我试图以编程方式调用"顶级"命令.以下是使用的代码:
char buffer [128];
char* threadsPointer;
char* procPointer;
NSString* numberOfThreadsString;
NSString* numberOfProcString;
FILE* output = popen("/usr/bin/top", "r");
while (fgets(buffer, sizeof(buffer), output) != NULL)
{
if ((procPointer = strstr(buffer, "Processes:")) != NULL)
{
procPointer += strlen("Proceses: ");
strcpy(buffer, procPointer);
numberOfProcString = [NSString stringWithUTF8String: buffer];
}
if ((threadsPointer = strstr(buffer, "sleeping,")) != NULL)
{
threadsPointer += strlen("sleeping, ");
strcpy(buffer, threadsPointer);
numberOfThreadsString = [NSString stringWithUTF8String: buffer];
}
}
NSLog(@"Proc: %@\nThreads: %@\n\n\n", numberOfProcString, numberOfThreadsString);
Run Code Online (Sandbox Code Playgroud)
我没有给出有效的输出,而是继续收到错误:"打开终端时出错:未知".我推荐了整段代码来识别问题,并意识到它的界限:FILE* output = popen ("/usr/bin/top", "r");导致错误.
有没有人知道我做错了什么?注意我在Mountain Lion OS X上为OSX而不是iOS构建应用程序.
top在MacOSX上要求将其标准输出或标准错误连接到要运行的有效终端.当您在没有终端(或$TERM环境变量设置为有效的终端名称,如"vt100")的情况下调用它时,它会给您错误:打开终端时出错:未知.
你真的不应该使用top它,因为它是一个需要终端的交互式程序.你应该只是在使用ps.