1. 程式人生 > >c/c++程式內部呼叫shell指令碼

c/c++程式內部呼叫shell指令碼

system()

函式原型:

#include <stdlib.h>
int system(const char *str)  

指令碼示例test.sh

#!/bin/sh

echo $HOME

指令碼呼叫程式示例demo.cc

#include <stdlib.h>
#include <iostream>
#include <string>

int main()
{
	std::string res;
	res = system("./test.sh");
	std::cout << res << '\n';
	return 0;
}

特點:
1.兩種錯誤返回值:
-1 system()進行fork子程序失敗;
127 執行指令碼或shell命令失敗
2.無法在程式中直接獲取到shell命令的返回內容

popen()

函式原型:

#include <stdio.h>
FILE* popen(char *command,char *type)  

指令碼示例:
同上

指令碼呼叫程式示例demo.cc

#include <stdio.h>   //popen()
#include <string.h>  //memset()

int main()
{
	FILE *fp;
	char buffer[80];
	memset(buffer, 0x00, sizeof(buffer));

	fp = popen("./test.sh", "r");
	fgets(buffer, sizeof(buffer), fp);

	printf("[%s]\n", buffer);

	pclose(fp);
	return 0;
}

特點:
1. 用 建立管道 的 方式 啟動 一個 程序, 並呼叫 shell
2. 可在程式內部獲取shell執行後的返回內容

參考部落格 :https://blog.csdn.net/luokehua789789/article/details/53117904