最近在实现一个linux下程序的时候,需要程序可以调用linux系统下面指定的应用程序。如果这是windows程序,那么可以通过RegOpenKey和RegOpenKey读取注册表找到指定程序的安装路径,再利用CreateProcess函数进行调用即可完成前面提到的功能。
因为每个人安装程序的习惯不一样,同一个程序在不同操作系统下的执行路径可能不一样,linux下没有注册表这一说,也就无法利用注册表来找到程序的执行路径。由此想到利用强大的shell命令来完成这一功能。首先介绍一下which指令,which指令用于查找可执行文件的位置,具体说明如下:
1.命令格式:
which 可执行文件名称
2.命令功能:
which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
3.命令参数:
-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p 与-n参数相同,但此处的包括了文件的路径。
-w 指定输出时栏位的宽度。
-V 显示版本信息
写一个简单的shell脚本即可得到程序的执行路径,在本例用VBoxManage做示例。代码如下:
which VBoxManage
保存为shell.sh
程序调用shell.sh并且保存程序执行路径的代码如下所示:
FILE *fp;
char buffer[100];
fp = popen("./shell.sh","r");
fgets(buffer,sizeof(buffer),fp);
pclose(fp);
上述代码片段即可把脚本执行得到的字符串保持到buffer数组中。