linux的c方式獲取shell結果
阿新 • • 發佈:2018-12-09
使用popen
test.c
#include <stdio.h> #include <string.h> #include <stdlib.h> int cmd_run(char *cmd, char* results, int len) { FILE *fp; char *buf; int totolen = 0; printf("run_cmd: [%s]\n", cmd); if ((fp = popen(cmd, "r")) == NULL) { printf("NMPPROTDATA_LOG: Fail to popen %s\n", cmd); return -1; } buf = (char *)calloc(1, len); if (buf == NULL) { pclose(fp); printf("NMPPROTDATA_LOG: Fail to alloc buffer %d\n", len); return -1; } while (fgets(buf, (len - totolen), fp) != NULL) { strcpy(results + totolen, buf); totolen += strlen(buf); memset(buf, 0, len); } pclose(fp); free(buf); //printf("results: [%s]\n", results); return 0; } int main(void) { int ret_val = -1; char buf[512] = {0}; char cmd[512] = {0}; printf("start\n"); sprintf(cmd, "pwd"); ret_val = cmd_run(cmd, buf, sizeof(buf)); if(ret_val < 0) { printf("execute fail\n"); } else { printf("result:%s\n", buf); } }