目标C:终端输出到NSString

时间:2010-08-12 03:11:18

标签: objective-c dns terminal whois

我正在尝试执行“whois search domainname.tld”。我目前正在使用system(“whois search domainname.tld”);但是我需要将输出转换为NSString变量以输出给用户。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

如果您愿意,您也可以使用NSTask来实现相同的目标。现在,我通常不会为他们做人们的功课,但是你可以用NSTask来做这样的事情:pastie.org/1087887

我们的想法是创建一个NSTask对象,使用参数@"/usr/bin/whois"运行whois(磁盘上运行@"search domainname.tld"的位置)。然后使用NSPipe对象读取命令的输出,并将其返回给用户。

注意:此功能正在阻止(它会等到whois完成之前完成运行),这是不推荐的,特别是对于网络操作。使这种异步是一种留给读者的练习。

答案 1 :(得分:2)

改为使用popen

system函数调用不会返回任何输出,因此您无法使用它。

您可以使用popen来管道输出netstat -l

#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
    FILE * fp;
    int status;
    const unsigned int sz = 1024;
    char buf[sz];

    string cmd;
    //cmd = "ls *";
    cmd = "netstat -l";
    fp = popen(cmd.c_str(), "r");
    if (fp == NULL) return 0;

    while (fgets(buf, sz, fp) != NULL)
        printf("%s", buf);

    status = pclose(fp);
    if (status == -1)
    {
        cout << "pclose failed" << endl;
    }

    return 1;
}

请参阅man popen了解详情。

将输出合并到Objective-C应该很容易,因为您可以从C拨打Objective-c

相关问题