使用popen函数创建ping命令管道

首先介绍下popen函数。

头文件:

#include <stdio.h>

函数定义:

FILE *popen(const char *command, const char*type);

关联函数:

int pclose(FILE *stream);

popen() 函数创建一个管道 ,调用fork建立一个 进程, 并调用shell。因为该函数的返回值是一个普通的标准I/0流,所以它只能用pclose()函数来关闭。

command 参数 是 一个 字符串指针, 指向的是一个 以 null 结束符 结尾的字符串, 这个字符串包含 一个 shell 命令. 这个命令 被送到 /bin/sh 以 -c 参数 执行, 即由 shell 来执行.

type 参数 也是 一个 指向 以 null 结束符结尾的 字符串的指针, 这个字符串 必须是'r' 或者'w’ 来指明 是 读还是写. 因为 管道是被定义成单向的, 所以type 参数 只能定义成 只读或者 只写, 不能是 两者同时, 结果流也相应的 是只读 或者 只写.

注意,popen 函数的 输出流默认是被全缓冲的.

pclose 函数 等待 相关的进程结束并返回 一个 command 命令的 退出状态.

好了下面根据以上说明作成ping命令管道,如下所示:

#include <stdio.h>  
#include <stdlib.h>  

#define REMOTEIP "192.168.100.11"

int main( )
{
	char   psBuffer[512];
	FILE   *pPing;

	pPing = popen( "ping " REMOTEIP, "r" );
	if( pPing == NULL ){
		printf("error end\n");
		exit( 1 );
	}

	while(fgets(psBuffer, 512, pPing))
	{
		printf("%s", psBuffer);
	}

	pclose(pPing);
}

编译运行如下:

[root@xxx ping]# gcc ping.c 
[root@xxx ping]# ./a.out 
PING 192.168.100.11 (192.168.100.11) 56(84) bytes of data.
64 bytes from 192.168.100.11: icmp_seq=1 ttl=64 time=2.19 ms
64 bytes from 192.168.100.11: icmp_seq=2 ttl=64 time=0.352 ms
64 bytes from 192.168.100.11: icmp_seq=3 ttl=64 time=0.322 ms
64 bytes from 192.168.100.11: icmp_seq=4 ttl=64 time=0.305 ms
^C
[root@ xxx -vm ping]#



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值