进程间的函数调用算是进程间通信的一种方式吗

发布于 2022-09-30 07:32:49 字数 195 浏览 18 评论 0

请问大家:

比如公司开发的几个模块,每个都是一个task,都起为一个进程,除了常规的消息信号量这些方式,也互相包含一些头文件,调用对方的一些函数传值.

这种函数调用,算是进程间传递信息的一种方式吗?在这种函数间传递指针应该是不合法的,是吧?因为进程的数据空间都是不同的,但是传值可以理解为一种通信方式么?

谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

塔塔猫 2022-10-07 07:32:49

不是进程间通信的方式.

详细请找操作系统相关的书籍看看吧.

我的痛♀有谁懂 2022-10-07 07:32:49

我也知道一般所说的进程通信就是那几种方式,管道,消息队列,信号量.
可我觉得这也算是一种进程间的xia信息交互,为什么不能理解为一种通信方式呢,还是我的理解概念上有问题?

童话里做英雄 2022-10-07 07:32:49

还是常规意义上的通信的概念就是数据空间的共享?一般操作系统里提到的进程通信是不是包括两个概念:一个是交互,另外一个是共享系统数据?而函数级的调用只是利用堆栈传递一些静态数据?

岁吢 2022-10-07 07:32:49

C 语言的函数调用都是只有在单独进程内、独立地址空间内部进行的调用。所谓“相包含一些头文件,调用对方的一些函数传值.”,还是要看它具体的底层实现。

水水月牙 2022-10-07 07:32:49

>> 调用对方的一些函数传值.

怎么可能呢? 除非做成共享库了,否则一个进程怎能调用别的进程的代码?

人│生佛魔见 2022-10-07 07:32:49

非常感谢大家的回答,我想我可能是把问题弄混了,一个是编译概念,一个是运行概念.不过这个问题的出现确实很怪.每个进程都应该有自己的独立地址空间,无论是堆还是栈应该都是自己私有的,别的进程应该无法直接访问,比如通过指针.我想问题可能还是在于这个声明为extern的在某个进程内定义的函数,是可重用的,这个进程可用,其他的进程也可有调用.这应该是link时把这个函数代码link到各个不同的模块.我把这个问题搞混了,可能也是因为没有考虑到有操作系统的API调用可以让进程共享全局变量.

关于这个函数可重入,我还有一个问题,是以前一个面试时候的问题.有个人问我,象有的程序notepad,可以运行多个出来.象有的程序,如acrobat,就只能运行一个出来. 我当时回答的是sdi(单窗口)和mdi(主从窗口)的区别.但好象也不对.比如象myie. 好象就可以同时运行多个,每个里面也有多个窗口.不知道这不是因为notepad和acrobat这种程序的写法区别,和用到的可重入还是什么不能重入的函数区别?有人说是因为程序中自己做了处理,启动时会检测系统中是否已经注册了一个相同的进程.我觉得也不正确. 不知道这是因为什么原因呢?

韵柒 2022-10-07 07:32:49

这个和函数是否能重用没有区别。另外函数是否是reentrant,也不是你说的这种情况。

所谓的单实例应用,通常有几种方法。最简单就是用一个Lock文件。比如xdm, httpd等等都是这么做的。WIndows的应用还有用注册表的,检查窗口标题的……

放手` 2022-10-07 07:32:49

我觉得可能需要澄清一个基本的概念。进程是数据的集合,一个函数(尤其是动态库里的函数)是不太可能属于某一个特定的进程的。所谓进程间通信,指的是数据的传递。

很糊涂小朋友 2022-10-07 07:32:49

我觉得还是二值信号量比较好一些,lock文件也可以,不过总是感觉不安全,呵呵

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文