Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C:终端输出到NSString_Objective C_Dns_Terminal_Whois - Fatal编程技术网

Objective c 目标C:终端输出到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

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


我怎样才能做到这一点?

使用
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中所述链路已断开链路已断开