我正在循环使用C ++ _popen管道魔法在shell中发出“nslookup [IP]”命令所得到的响应。
您可能知道(从终端尝试... Windows命令提示符可能与另一个操作系统输出不同;我使用的是Windows 7),nslookup查询将返回如下内容:
C:\MyApps>nslookup 8.8.8.8
Server: dns.mydomain.com
Address: 192.168.200.15
Name: google-public-dns-a.google.com
Address: 8.8.8.8
这是我的代码(重要的代码段):
vector<string> IPAddresses;
// [...] some code to populate IP Addresses into that vector [...]
char buff[512];
for(int x=0;x<IPAddresses.size();x++)
{
cmd = "nslookup " + IPAddresses[x];
FILE *fpipe = _popen(cmd.c_str(),"r");
while(fgets(buff, sizeof(buff), fpipe)!=NULL)
{
//DEBUG CODE HERE
}
}
现在检查我的“调试代码”示例及其输出(注意当没有DNS记录时,“找不到IP:不存在的域”错误是正常的):
if(buff[0]=='N') cout<<buff;
输出:
Name: computer1.mydomain.com
Name: computer2.mydomain.com
*** dns.mydomain.com can't find 192.168.200.55: Non-existent domain
Name: computer3.mydomain.com
*** dns.mydomain.com can't find 192.168.200.122: Non-existent domain
调试代码2:
if(buff[0]=='*') cout<<buff;
输出:
*** dns.mydomain.com can't find 192.168.200.55: Non-existent domain
*** dns.mydomain.com can't find 192.168.200.122: Non-existent domain
当我在寻找buff [0]为'N'时,如何弹出不存在的域错误?事实上,它出现在两个调试示例中,因此我的程序认为char既是'N'又是'*'???
答案 0 :(得分:3)
这两个字符串可能不是因为你的代码正在打印而输出,而是因为nslookup
正在将它们写入stderr
,你的程序没有捕获它(因此与你的输出混合)