基础知识:
1.利用popen的管道来执行shell指令ping 127.0.0.1 -c 4.表示我ping 基本4个包。
2.函数strstr可以得到需要字符串在原来字符串中的首地址
printf
(
"%s transmitted %s rec
\n
"
, n_tranas, n_receive);
3.函数sscanf()可以获得字符串中的变量。format中[^=]表示字符串以=结束且不包含=。%*表示跳过响应的字符串
上代码:
#include
<stdio.h>
#include
<string.h>
int
main
()
{
FILE
*
fp;
char
line[
256
];
char
*
p;
char
n_tranas[
3
];
char
n_receive[
3
];
fp
=
popen
(
"ping 127.0.0.1 -c 4"
,
"r"
);
if
(fp
==
NULL
)
{
printf
(
"error!
\n
"
);
return
-
1
;
}
while
(
!
feof
(fp))
{
if
(
fgets
(line,
256
, fp)
!=
NULL
)
{
// printf("p:%s\n", line);
if
((p
=
strstr
(line,
"packets"
))
!=
NULL
)
{
sscanf
(line,
"
%
[^ ] %*s %*s
%
[^ ]"
, n_tranas,n_receive);
}
}
}
printf
(
"%s transmitted %s rec
\n
"
, n_tranas, n_receive);
pclose
(fp);
#if
0
char *str = "Total Mem:1800 FreeMem:800 swapMem:500";
char *p = strstr(str, "FreeMem");
int freeMem;
sscanf(p + strlen("FreeMem:"), "%d", &freeMem);
printf("feeMem=%d\n",freeMem);
#endif
return
0
;
}
结果:
st@st-Aspire-4750:~/workdir/proj/mqsend$ ./a.out
4 transmitted 4 rec