#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <set>
#include<iostream>
using namespace std;
int split(char buf[], const char *c, char Item[16][128]) {
int i = 0, n = 0;
for (i = 0; i < 16; i++)
{
memset(Item[i], 0, 128);
}
char* pbuf;
int len = strlen(buf);
pbuf = (char *)malloc(len + 1);
strcpy(pbuf, buf);
pbuf[len] = 0x00;
int s = 0;
for (i = 0; i < len; i++) {
if (pbuf[i] == *c) {
pbuf[i] = 0x00;
if (s != i) {
strcpy(Item[n++], &pbuf[s]);
//printf("string %d: %s\r\n",n,Item[n-1]);
}
s = i + 1;
}
}
if (s <= (len - 1))
strcpy(Item[n++], &pbuf[s]);
free(pbuf);
return n;
}
// 描述:execmd函数执行命令,并将结果存储到result字符串数组中
// 参数:cmd表示要执行的命令
// result是执行的结果存储的字符串数组
// 函数执行成功返回1,失败返回0
int execmd(const char* cmd, set<int> &result) {
char buffer[128]; //定义缓冲区
char Item[16][128];
//stringstream ss;
FILE* pipe = _popen(cmd, "r"); //打开管道,并执行命令
if (!pipe)
return 0; //返回0表示运行失败
while (!feof(pipe)) {
if (fgets(buffer, 128, pipe)) { //将管道输出到result中
split(buffer, " ", Item);
int nPID = atoi(Item[4]);
result.insert(nPID);
}
}
_pclose(pipe); //关闭管道
return 1; //返回1表示运行成功
}
int main() {
set<int> result;
if (1 == execmd("netstat -ano | findstr \"80\" ", result)) {
set<int>::iterator iter;
for (iter = result.begin(); iter != result.end(); iter++)
{
printf("%d\n", *iter);
}
// printf(result);
}
system("pause"); //暂停以查看结果
}
参考:https://blog.csdn.net/hxh129/article/details/8000205?utm_source=blogxgwz2