是什么导致此命令行错误?

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构建应用程序.

Jon*_*Lin 5

top在MacOSX上要求将其标准输出或标准错误连接到要运行的有效终端.当您在没有终端(或$TERM环境变量设置为有效的终端名称,如"vt100")的情况下调用它时,它会给您错误:打开终端时出错:未知.

你真的不应该使用top它,因为它是一个需要终端的交互式程序.你应该只是在使用ps.