使用popen执行脚本并获取返回值

来源:互联网 发布:炫踪网络 加班严重吗 编辑:程序博客网 时间:2024/05/16 12:44

popen函数

 

 

#include <stdio.h>#include <stdlib.h>#include <string.h>#define BUF_SIZE 8192#define RETURNED_VALUE "__returned_value_"intmain(void){char *cmd1 = "./test.sh";char cmd[BUF_SIZE];memset(cmd, 0, sizeof(cmd));int ret = snprintf(cmd, sizeof(cmd), "%s 2>&1; echo %s$?", cmd1, RETURNED_VALUE);if (ret < 0) {perror("snprintf()");return -1;}printf("cmd: %s\n", cmd);FILE *fp = popen(cmd, "r");if (NULL == fp) {perror("popen()");return -2;}char buf[BUF_SIZE] = {[0 ... BUF_SIZE-1] = 0,};ssize_t buf_len = BUF_SIZE - 1;char *p = NULL;int rval = -1;char *line = NULL;size_t len = 0;ssize_t read = 0;while ((read = getline(&line, &len, fp)) != -1) {if (NULL != (p = strstr(line, RETURNED_VALUE))) {p += strlen(RETURNED_VALUE);rval = atoi(p);} else {if (buf_len > 0) {strncat(buf, line, buf_len);buf_len -= read;}}}printf("buf: %s", buf);printf("rval: %d\n", rval);free(line);pclose(fp);return 0;}

脚本

#!/bin/bashecho asdfghjklexit 123


 

 


 

原创粉丝点击