我对编码很陌生。我需要退伍军人的建议,因为我这样做是为了完成我的任务。
有没有办法读取命令提示符(CMD)生成的字符串?
我的任务是创建一个代码来ping所有网络并通过输入/输出将IP地址分配为活动和非活动状态。
我想从cmd复制一个字符串,例如:
来自192.168.0.1的回复:bytes = 32 time< 1ms TTL = 64< - (表示有效) 来自192.168.0.2的回复:目标主机无法访问< - (这表示不活动)
如果我能够复制该行,我可以编写一个If / Else条件来分隔它们。如果有更简单的方法来改善这种情况,请帮助我。谢谢。
下面的代码是ping所有IP地址,直到255,但我还需要一个功能来分隔活动和非活动IP地址。
using namespace std;
void main()
{
string ipAddress;
cout << "Enter the IPv4 address network..." << endl;
cout << "Example: 10.0.0. or 192.168.1." << endl;
getline(cin, ipAddress);
cout << "Please wait..." << endl;
string s = "ping " + ipAddress;
for (int x = 0; x <= 255; ++x)
{
stringstream ss;
ss << x << endl;
string newString = ss.str();
string finalString = s + newString;
system(finalString.c_str());
}
system("pause");
}
发帖
答案 0 :(得分:1)
您可以使用popen
功能。此功能允许您读取命令的输出。
就像马丁在评论中所说,在Windows上你会使用_popen
,msdn doc:
msdn.microsoft.com/en-us/library/96ayss4b.aspx
从此页面查看linux的例子:
http://www.sw-at.com/blog/2011/03/23/popen-execute-shell-command-from-cc/
答案 1 :(得分:0)
这是从CMD复制的另一种方法。
以下代码使用内置函数system()
system("ping www.google.com > ping.txt ")
并将控制台屏幕的输出重定向到文本文件
ping www.google.com > ping.txt
并将其存储在名为 ping.txt 的文件中。然后打开该文件
//open text file ping.txt
ifstream TextFile ("ping.txt");
并输入一个字符串向量并显示。
// display ping results
for (int i=0;i<LinesFromtextFile.size(); i++){
cout<<""<< LinesFromtextFile[i] <<"";
}
通过vector<string> LinesFromtextFile
存储的ping内容,您可以随意使用它。
#include <windows.h>
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
using namespace std;
int main () {
int j=0;
char *url = new char[256];
string line;
vector<string> LinesFromtextFile;
memset(url,' ', sizeof(url) );
strcpy(url, "ping www.google.com > ping.txt " );
cout<<"\n\n"<< url <<"\n\n";
// launch ping from visual c++
system( url );
//open text file ping.txt
ifstream TextFile ("ping.txt");
while (getline(TextFile, line)){
// store lines from textfile into vector
LinesFromtextFile.push_back(line);
LinesFromtextFile[j] = LinesFromtextFile[j] +"\n";
j++;
}
TextFile.close();
// display ping results
for (int i=0;i<LinesFromtextFile.size(); i++){
cout<<""<< LinesFromtextFile[i] <<"";
}
delete[] url;
cout<<"\nPress ANY key to close.\n\n";
cin.ignore(); cin.get();
return 0;
}
答案 2 :(得分:0)
如果由于某种原因不想使用_popen()
,还有另一种方法:
您可以使用>filename
语法将ping
的输出重定向到文件。
例如,std::system("ping 8.8.8.8 >out.txt")
会调用ping并将其输出到out.txt
。
此功能是Windows shell本身的一部分,因此它适用于任何程序。