【Linux】Linux程序中通过popen执行shell命令并获取执行结果

前言

linux程序中执行shell命令的方式有很多种,譬如:system、exec族函数、popen。这里演示使用popen来执行ping命令,并获取执行结果。

popen函数

popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。
参数type可使用“r”代表读取,“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。此外,所有使用文件指针(FILE*)操作的函数也都可以使用,除了fclose()以外。

如果 type 为 “r”,那么调用进程读进 command 的标准输出。
如果 type 为 “w”,那么调用进程写到 command 的标准输入。

代码

#include <memory>
#include <string>
#include <cstdio>

bool executeShellCommand(const std::string& shellCmd)
{
	std::unique_ptr<char[]> buff(new char[2048]);
	FILE* fp = popen(shellCmd.c_str(), "r");
	if (nullptr == fp) {
		return false;
	}
	auto size = fread(buff.get(), 1, 2048, fp);
	if (0 != size) {
		printf("%s\n", buff.get());
	}
	
	auto executeStatus = pclose(fp);
	if (executeStatus < 0) {
		return false;
	}
	
	if (0 != WEXITSTATUS(executeStatus)) {
		return false;
	}
	
	return true;
}

测试

executeShellCommand("ping -c 1 -W 1 www.baidu.com");

参考

https://blog.csdn.net/kuniqiw/article/details/124297888

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值