函数和进程之间的相似性(开拓你的视野)

如果你只学了C语言、C++或是JAVA等高级语言,你可能只知道函数间可以相互调用,但当你学习了进程的相关知识后,你的视野也就不止于此了,因为各个程序之间其实也是可以相互调用的。

如果你学过C语言,你应该有以下认识:

  • 一个C程序由很多函数组成,一个函数可以调用另一个函数,同时传递给它一些参数。
  • 被调用的函数执行一定的操作,然后返回一个值。
  • 每个函数都有它自己的局部变量。
  • 不同函数通过call/return系统进行通信。

这种通过参数和返回值,在拥有私有数据的函数间通信的模式是结构化程序设计的基础,Linux鼓励将这种应用于程序之内的模式扩展到程序之间。
在这里插入图片描述
一个进程可以使用fork创建一个子进程,然后使用exec系列函数将子进程的代码和数据替换为另一个程序的代码和数据,之后子进程就用该程序的数据执行该程序的代码,从而达到程序之间相互调用的效果。

pid_t id = fork();
if (id == 0){
	execvp(myargv[0], myargv);
	exit(1);
}

当这个被调用的程序执行完毕后,通过exit(n)来返回一个值。调用它的进程可以通过wait或waitpid来获取这个返回值。

wait(&status);
waitpid(id, &status, 0);

程序之间相互调用带来的好处之一

我们都知道各个语言有自己独特的优势,当我们做某一技术开发时,可能需要用到多种语言,而我们最终就是利用程序之间的相互调用使得各个语言之间可以进行衔接。

例如,一个C程序可以通过exec系列函数调用shell脚本、python以及C++等语言实现的程序。

shell脚本:
在这里插入图片描述
python:
在这里插入图片描述
C++:
在这里插入图片描述
我们使用以下C程序,便可以分别调用以上三个程序。
在这里插入图片描述
调用shell脚本运行结果:
在这里插入图片描述
调用python运行结果:
在这里插入图片描述
调用C++运行结果:
在这里插入图片描述

  • 39
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2021dragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值