Цель C: вывод терминала в NSString - PullRequest
1 голос
/ 12 августа 2010

Я пытаюсь выполнить "whois search domainname.tld".В настоящее время я использую систему ("whois search domainname.tld");однако мне нужно получить вывод в переменную NSString для вывода пользователю.

Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 12 августа 2010

Если вы хотите, вы также можете использовать NSTask для достижения той же цели.Я обычно не делаю домашнее задание для людей, но вот как вы можете сделать что-то подобное с NSTask: pastie.org / 1087887 .

Идея состоит в томВы создаете объект NSTask для запуска @"/usr/bin/whois" (место на диске, с которого запускается whois) с аргументом @"search domainname.tld".Затем вы используете объект NSPipe, чтобы прочитать вывод команды и вернуть его пользователю.

Примечание: эта функция блокируется (она будет ждать до whoisзавершает работу до завершения), что не рекомендуется, особенно для сетевых операций.Сделать это асинхронным - упражнение, оставленное читателю.

2 голосов
/ 12 августа 2010

Вместо этого используйте 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.

...