2010-08-12 101 views
1

我試圖執行「whois search domainname.tld」。我目前正在使用系統(「whois search domainname.tld」);但是我需要獲得輸出到NSString變量輸出給用戶。目標C:終端輸出到NSString中

我怎樣才能做到這一點?

+0

不要使用系統和popen來做一個簡單的whois請求。在你的編程語言或底部使用特定的庫,只需在端口43上打開一個TCP套接字併發送由CR + LF終止的查詢,如RFC3912 – 2018-01-04 20:13:34

回答

3

如果你願意,你可以使用NSTask來完成相同的目標。現在,我通常不會爲他們做人的功課,但這裏是你如何用NSTask做這樣的事情:pastie.org/1087887

這個想法是,您創建一個NSTask對象運行@"/usr/bin/whois"(磁盤上運行whois的位置)與參數@"search domainname.tld"。然後,您使用一個NSPipe對象來讀取命令的輸出,並將其返回給用戶。

注:這個功能阻止(它會等到完成運行前whois結束),這是不推薦的,尤其是對網絡運營。使這種異步是一個留給讀者的練習。

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中,因爲您可以從Objective-c調用C

+0

中所解釋的那樣非常有幫助,我假設這是因爲這裏沒有Objective-c ...我只是展示瞭如何從C中獲取輸出,然後將它合併到Objective-c中,而不是調用system()。由於沒有示例代碼可以顯示系統調用,所以我不打算編寫整個應用程序,只是顯示了重要的部分... – stefanB 2010-08-12 07:58:30

+0

+1如果OP使用system()並需要檢索stdout,他應該知道popen()。 – mouviciel 2010-08-12 09:28:43