实现C语言跑shell脚本并获取输出字符,实现如下:
C代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#define TEST_SHELL "./t.sh"
int exec_process(char *cmd, char *result, int size)
{
size_t ret;
FILE *fp = NULL;
if(cmd == NULL) {
return -1;
}
fp = popen(cmd, "r");
if(fp == NULL) {
printf("exec_process: error exec cmd: %s\n", cmd);
return -1;
}
if(result != NULL && size > 0) {
memset(result, 0, size);
ret = fread(result, 1, size - 1, fp); /* -1: at least one zero plus */
if(ferror(fp)) {
printf("exec_process: %s\n", strerror(errno));
pclose(fp);
return -1;
}
if(ret == 0) {
pclose(fp);
return -1;
}
}
pclose(fp);
return 0;
}
int main()
{
char popenret[4000] = {0};/*执行脚本后的返回值*/
memset(popenret, 0, sizeof(popenret));
if(exec_process(TEST_SHELL, popenret, sizeof(popenret)) != 0) {
printf("RUN %s faild", TEST_SHELL);
return -1;
}
printf("%s",popenret);
return 0;
}
shell代码
t.sh脚本代码:
#!/bin/sh
check_file() {
local ret=`ls`
[ -z "$ret" ] && return 1 || return 0
}
check_file
if [ $? == 0 ]; then
LIST=`ls`
echo $LIST
fi
输出当前目录文件列表。
扩展
使用execl和system只能返回int类型执行结果,所以使用popen比较合适;