进程间的函数调用算是进程间通信的一种方式吗
请问大家:
比如公司开发的几个模块,每个都是一个task,都起为一个进程,除了常规的消息信号量这些方式,也互相包含一些头文件,调用对方的一些函数传值.
这种函数调用,算是进程间传递信息的一种方式吗?在这种函数间传递指针应该是不合法的,是吧?因为进程的数据空间都是不同的,但是传值可以理解为一种通信方式么?
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
不是进程间通信的方式.
详细请找操作系统相关的书籍看看吧.
我也知道一般所说的进程通信就是那几种方式,管道,消息队列,信号量.
可我觉得这也算是一种进程间的xia信息交互,为什么不能理解为一种通信方式呢,还是我的理解概念上有问题?
还是常规意义上的通信的概念就是数据空间的共享?一般操作系统里提到的进程通信是不是包括两个概念:一个是交互,另外一个是共享系统数据?而函数级的调用只是利用堆栈传递一些静态数据?
C 语言的函数调用都是只有在单独进程内、独立地址空间内部进行的调用。所谓“相包含一些头文件,调用对方的一些函数传值.”,还是要看它具体的底层实现。
>> 调用对方的一些函数传值.
怎么可能呢? 除非做成共享库了,否则一个进程怎能调用别的进程的代码?
非常感谢大家的回答,我想我可能是把问题弄混了,一个是编译概念,一个是运行概念.不过这个问题的出现确实很怪.每个进程都应该有自己的独立地址空间,无论是堆还是栈应该都是自己私有的,别的进程应该无法直接访问,比如通过指针.我想问题可能还是在于这个声明为extern的在某个进程内定义的函数,是可重用的,这个进程可用,其他的进程也可有调用.这应该是link时把这个函数代码link到各个不同的模块.我把这个问题搞混了,可能也是因为没有考虑到有操作系统的API调用可以让进程共享全局变量.
关于这个函数可重入,我还有一个问题,是以前一个面试时候的问题.有个人问我,象有的程序notepad,可以运行多个出来.象有的程序,如acrobat,就只能运行一个出来. 我当时回答的是sdi(单窗口)和mdi(主从窗口)的区别.但好象也不对.比如象myie. 好象就可以同时运行多个,每个里面也有多个窗口.不知道这不是因为notepad和acrobat这种程序的写法区别,和用到的可重入还是什么不能重入的函数区别?有人说是因为程序中自己做了处理,启动时会检测系统中是否已经注册了一个相同的进程.我觉得也不正确. 不知道这是因为什么原因呢?
这个和函数是否能重用没有区别。另外函数是否是reentrant,也不是你说的这种情况。
所谓的单实例应用,通常有几种方法。最简单就是用一个Lock文件。比如xdm, httpd等等都是这么做的。WIndows的应用还有用注册表的,检查窗口标题的……
我觉得可能需要澄清一个基本的概念。进程是数据的集合,一个函数(尤其是动态库里的函数)是不太可能属于某一个特定的进程的。所谓进程间通信,指的是数据的传递。
我觉得还是二值信号量比较好一些,lock文件也可以,不过总是感觉不安全,呵呵