我试图执行“whois search domainname.tld”。我目前正在使用系统(“whois search domainname.tld”);但是我需要获得输出到NSString变量输出给用户。目标C:终端输出到NSString中
我怎样才能做到这一点?
我试图执行“whois search domainname.tld”。我目前正在使用系统(“whois search domainname.tld”);但是我需要获得输出到NSString变量输出给用户。目标C:终端输出到NSString中
我怎样才能做到这一点?
如果你愿意,你可以使用NSTask来完成相同的目标。现在,我通常不会为他们做人的功课,但这里是你如何用NSTask做这样的事情:pastie.org/1087887。
这个想法是,您创建一个NSTask
对象运行@"/usr/bin/whois"
(磁盘上运行whois
的位置)与参数@"search domainname.tld"
。然后,您使用一个NSPipe
对象来读取命令的输出,并将其返回给用户。
注:这个功能阻止(它会等到完成运行前whois
结束),这是不推荐的,尤其是对网络运营。使这种异步是一个留给读者的练习。
改为使用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
。
不要使用系统和popen来做一个简单的whois请求。在你的编程语言或底部使用特定的库,只需在端口43上打开一个TCP套接字并发送由CR + LF终止的查询,如RFC3912 – 2018-01-04 20:13:34