怎么获得system() 函数的返回值

在 c 或者 c++ 代码中,有时我们需要调用系统功能,例如执行一个脚本;则只能使用system() 来实现,那么怎么根据system()函数的返回值来确认,脚本是否执行成功?或者脚本是否完成所打算执行的功能呢?下面通过一个例子来说明。

1.实现功能的脚本如下, 脚本名字是 update_mcu.sh:

  以下脚本是一个给mcu升级的脚本,实现了检测是否有升级包,对升级包的md5sum校验等功能;校验完成后进行升级,升级函数upgrade_mcu 有返回值,根据返回值确定是否升级成功,根据是否升级成功,返回给 system()函数不同的返回值。

这个返回值用 exit 或者 exit -1 等来体现。

#!/system/bin/sh

MCU_FIRMWARE=/data/update/mcu_app.s19
MCU_FIRMWARE_MD5=/data/update/mcu_app.s19.md5

MD5SUM_TMP=/data/update/md5sum_tmp
MD5SUM_VALUE=/data/update/md5sum_value


echo "Need update mcu version, Continue!!!"

save_md5sum=`cat $MCU_FIRMWARE_MD5`
echo "mcu save md5sum is $save_md5sum"

md5sum $MCU_FIRMWARE > $MD5SUM_TMP
busybox awk '{print $1}' $MD5SUM_TMP > $MD5SUM_VALUE
curr_app_md5sum=`cat $MD5SUM_VALUE`
echo "curr app md5sum is $curr_app_md5sum"

if [ -z $save_md5sum ];then
	echo "save_md5sum is NULL; Exit!!!"
	setprop vendor.update_mcu.completed -1
	exit -1
fi

if [ -z $curr_app_md5sum ];then
	echo "curr_app_md5sum is NULL; Exit!!!"
	setprop vendor.update_mcu.completed -1
	exit -1
fi

if [ "$curr_app_md5sum" == "$save_md5sum" ];then
	echo "the md5sum is ok"
	upgrade_mcu -p -a $MCU_FIRMWARE
	RET=$?
	echo "the upgrade_mcu ret is $RET"
	if [ $RET -eq 0 ];then
		setprop vendor.update_mcu.completed 1
		echo "update mcu has over!!!"
	else
		setprop vendor.update_mcu.completed -1
		echo "update mcu has Error!!!"
		exit -1
	fi
else
	echo "the md5sum is Error"
	setprop vendor.update_mcu.completed -1
	exit -1
fi

2.C或者 C++代码里如下:

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


int ret;

ret = system(sh /system/bin/update_mcu.sh);

printf("the system ret is: %d", ret);

经过测试,当脚本文件结束语句 exit 的参数不同时, system() 的返回值也不同;可以据此判断是否执行成功升级流程。

       测试的几个返回值记录如下:

        1. 脚本正常退出没有 exit, 或者只有 exit; 或者 exit 0 的时候;system()的返回值都是 0;表示正常结束。

         2. 脚本 exit 1  退出的时候, system()返回值是 256;

         3. 脚本 exit -1 退出的时候, system()返回值是 65280.

        特此记录。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值