Objective c 目标C:终端输出到NSString
我正在尝试执行“whois search domainname.tld”。我目前正在使用这个系统(“whois search domainname.tld”);但是,我需要将输出转换为NSString变量,以便输出给用户Objective c 目标C:终端输出到NSString,objective-c,dns,terminal,whois,Objective C,Dns,Terminal,Whois,我正在尝试执行“whois search domainname.tld”。我目前正在使用这个系统(“whois search domainname.tld”);但是,我需要将输出转换为NSString变量,以便输出给用户 我怎样才能做到这一点?使用popen。 系统函数调用不返回任何输出,因此无法使用该函数获取输出 例如,您可以使用popen对netstat-l的输出进行管道传输: #include <iostream> #include <stdio.h> using
我怎样才能做到这一点?使用
popen
。
系统
函数调用不返回任何输出,因此无法使用该函数获取输出
例如,您可以使用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;
}
#包括
#包括
使用名称空间std;
int main()
{
文件*fp;
智力状态;
常量无符号整数sz=1024;
char-buf[sz];
字符串cmd;
//cmd=“ls*”;
cmd=“netstat-l”;
fp=popen(cmd.c_str(),“r”);
如果(fp==NULL)返回0;
while(fgets(buf,sz,fp)!=NULL)
printf(“%s”,buf);
状态=pclose(fp);
如果(状态==-1)
{
不能使用popen
。
系统
函数调用不返回任何输出,因此无法使用该函数获取输出
例如,您可以使用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;
}
#包括
#包括
使用名称空间std;
int main()
{
文件*fp;
智力状态;
常量无符号整数sz=1024;
char-buf[sz];
字符串cmd;
//cmd=“ls*”;
cmd=“netstat-l”;
fp=popen(cmd.c_str(),“r”);
如果(fp==NULL)返回0;
while(fgets(buf,sz,fp)!=NULL)
printf(“%s”,buf);
状态=pclose(fp);
如果(状态==-1)
{
cout如果您愿意,您也可以使用NSTask来完成相同的目标。现在,我通常不会为人们做家庭作业,但下面是如何使用NSTask执行类似操作:
其思想是使用参数@“search domainname.tld”
创建一个NSTask
对象来运行@/usr/bin/whois
(运行whois
的磁盘上的位置)。然后使用NSPipe
对象读取命令的输出,并将其返回给用户
注意:此函数正在阻塞(它将等待whois
在完成之前完成运行),这是不推荐的,尤其是对于网络操作。使此异步化是留给读者的一个练习。如果您愿意,您也可以使用NSTask来实现相同的目标。现在,我通常不是一个为人们做家庭作业的人,但下面是如何使用NSTask执行类似操作:
其思想是使用参数@“search domainname.tld”
创建一个NSTask
对象来运行@/usr/bin/whois
(运行whois
的磁盘上的位置)。然后使用NSPipe
对象读取命令的输出,并将其返回给用户
注意:此函数正在阻塞(它将等待whois
在完成之前完成运行),这是不推荐的,尤其是对于网络操作。让这个异步化是留给读者的练习。非常有用的下一票,我想这是因为这里没有涉及Objective-c…我只是展示如何从c获取输出,然后将其合并到Objective-c中,而不是调用system()
。由于没有示例代码显示对系统的调用,我不打算编写整个应用程序,只显示重要部分…+1如果OP使用system()并需要检索stdout,他应该知道popen().非常有帮助的下一票,我想这是因为这里没有涉及Objective-c…我只是展示如何从c获取输出,然后将其合并到Objective-c中,而不是调用system()
。由于没有示例代码显示对系统的调用,我不打算编写整个应用程序,只显示重要部分…+1如果OP使用system()并需要检索stdout,他应该知道popen()。请勿使用system或popen来执行简单的whois请求。请在编程语言中使用特定的库,或在其底部打开端口43上的TCP套接字,然后按照RFC3912中的说明发送以CR+LF终止的查询。请勿使用system或popen来执行简单的whois请求。请在编程语言中使用特定的库或者在它的底部,只需在端口43上打开一个TCP套接字,然后发送由CR+LF终止的查询,如RFC3912中所述链路已断开链路已断开