Linux的进程互调技术(多语言互调)
1.函数与进程之间的相似性
如果你学过C语言,你应该有以下认识:
- 一个C程序由很多函数组成,一个函数可以调用另一个函数,同时传递给它一些参数
- 被调用的函数执行一定的操作,然后返回一个值
- 每个函数都有它自己的局部变量
- 不同函数通过call/return系统进行通信
这种通过参数和返回值,在拥有私有数据的函数间通信的模式是结构化程序设计的基础,Linux鼓励将这种应用于程序之内的模式扩展到程序之间,如下图:
2.多语言程序互调技术
程序之间相互调用的好处:我们都知道各个语言有自己独特的优势,当我们做某一技术开发时,可能需要用到多种语言,而我们最终就是利用程序之间的相互调用使得各个语言之间可以进行衔接
例如,一个C程序可以通过exec系列函数调用shell脚本、python以及C++等语言实现的程序
Shell脚本
Python代码:
C++代码:
多种语言程序互调测试:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
int main()
{
pid_t id=fork();
if(id==0)
{
//child
execl("./test.sh","test.sh",NULL); //调用Shell脚本
//execl("./test.py","test.py",NULL); //调用Python脚本
//execl("./test","test",NULL); //调用Python脚本
exit(1);
}
int status=0;
pid_t ret=waitpid(id,&status,0);
if(ret>0)
{
printf("exit code:%d\n",WEXITSTATUS(status));
}
return 0;
}
Shell脚本调用结果:
补充:shell脚本通过
sh 脚本名
调用
Python代码调用结果:
C++代码调用结果: