当前位置: 技术问答>linux和unix
进程间的函数调用算是进程间通信的一种方式吗
来源: 互联网 发布时间:2015-11-02
本文导语: 请问大家: 比如公司开发的几个模块,每个都是一个task,都起为一个进程,除了常规的消息信号量这些方式,也互相包含一些头文件,调用对方的一些函数传值. 这种函数调用,算是进程间传递信息的一种方式吗?在这种函数...
请问大家:
比如公司开发的几个模块,每个都是一个task,都起为一个进程,除了常规的消息信号量这些方式,也互相包含一些头文件,调用对方的一些函数传值.
这种函数调用,算是进程间传递信息的一种方式吗?在这种函数间传递指针应该是不合法的,是吧?因为进程的数据空间都是不同的,但是传值可以理解为一种通信方式么?
谢谢!
比如公司开发的几个模块,每个都是一个task,都起为一个进程,除了常规的消息信号量这些方式,也互相包含一些头文件,调用对方的一些函数传值.
这种函数调用,算是进程间传递信息的一种方式吗?在这种函数间传递指针应该是不合法的,是吧?因为进程的数据空间都是不同的,但是传值可以理解为一种通信方式么?
谢谢!
|
------
非常感谢大家的回答,我想我可能是把问题弄混了,一个是编译概念,一个是运行概念.不过这个问题的出现确实很怪.每个进程都应该有自己的独立地址空间,无论是堆还是栈应该都是自己私有的,别的进程应该无法直接访问,比如通过指针.我想问题可能还是在于这个声明为extern的在某个进程内定义的函数,是可重用的,这个进程可用,其他的进程也可有调用.这应该是link时把这个函数代码link到各个不同的模块.我把这个问题搞混了,可能也是因为没有考虑到有操作系统的API调用可以让进程共享全局变量.
------
楼主理解还是有问题,“我想问题可能还是在于这个声明为extern的在某个进程内定义的函数,是可重用的,这个进程可用,其他的进程也可有调用”,你这里的进程应该是指程序代码。程序只有在运行起来之后才能称为“进程”。那些extern在编译的时候已经编程自己的资源了,不是进程间的共享及通信。
非常感谢大家的回答,我想我可能是把问题弄混了,一个是编译概念,一个是运行概念.不过这个问题的出现确实很怪.每个进程都应该有自己的独立地址空间,无论是堆还是栈应该都是自己私有的,别的进程应该无法直接访问,比如通过指针.我想问题可能还是在于这个声明为extern的在某个进程内定义的函数,是可重用的,这个进程可用,其他的进程也可有调用.这应该是link时把这个函数代码link到各个不同的模块.我把这个问题搞混了,可能也是因为没有考虑到有操作系统的API调用可以让进程共享全局变量.
------
楼主理解还是有问题,“我想问题可能还是在于这个声明为extern的在某个进程内定义的函数,是可重用的,这个进程可用,其他的进程也可有调用”,你这里的进程应该是指程序代码。程序只有在运行起来之后才能称为“进程”。那些extern在编译的时候已经编程自己的资源了,不是进程间的共享及通信。
|
各个模块,函数之间的调用这都是静态的概念,编译时的事情,跟进程没有关系
进程是动态的,“进程是一个可并发执行的具有独立功能的程序关于某个数据结合的一次执行过程,也是操作系统资源分配和保护的基本单位”
两则的概念不要搞混了
进程是动态的,“进程是一个可并发执行的具有独立功能的程序关于某个数据结合的一次执行过程,也是操作系统资源分配和保护的基本单位”
两则的概念不要搞混了
|
面试你的那个人多半是白痴,这个问题都要问!!!!
notepad可以运行多个,是因为程序自身运行的时候没有去搜索系统中是否还有一个这样的程序在运行,所以就可以运行多个,那是人家写程序的人的自由!!!
acrobat只能运行一个??低版本的acrobat同样可以运行多个!!!!!!所以说面试你的那个人是白痴!!!!人家在写acrobat的时候,在程序启动代码里去搜索系统中有没有这个程序在运行,如果已经有一个这样的程序在运行,那么它就将新的文档加入到原有的程序中去(就是多文档的概念),实现这种运行机制的方法有多种,比如可以用文件互斥,共享内存互斥,动态库中共享变量互斥,搜索进程列表等等方法!!!!!
notepad可以运行多个,是因为程序自身运行的时候没有去搜索系统中是否还有一个这样的程序在运行,所以就可以运行多个,那是人家写程序的人的自由!!!
acrobat只能运行一个??低版本的acrobat同样可以运行多个!!!!!!所以说面试你的那个人是白痴!!!!人家在写acrobat的时候,在程序启动代码里去搜索系统中有没有这个程序在运行,如果已经有一个这样的程序在运行,那么它就将新的文档加入到原有的程序中去(就是多文档的概念),实现这种运行机制的方法有多种,比如可以用文件互斥,共享内存互斥,动态库中共享变量互斥,搜索进程列表等等方法!!!!!