Chinaunix

标题: 请教Linux下可否像COM一样调用别的进程中函数? [打印本页]

作者: zjtjs    时间: 2008-03-02 00:08
标题: 请教Linux下可否像COM一样调用别的进程中函数?
想在LINUX下用C做一个DAEMON,在另一个或多个C或PHP实现的程序中调用该DAEMON中的函数,读取某些状态或指挥DAEMON去做一些事情,类似RPC或WIN32下COM的功能,但是不一定要通过网络跨主机,在同一台主机上实现就可以。请各位指点一下该用什么方法实现。(最好是比共享内存或消息队列省事点的)
作者: reiase    时间: 2008-03-02 00:08
看楼主的用途,如果设计不充分的话,先用个文本形式的协议会更好一点,变动起来没有什么负担,就这边发送一个字符串过去,daemon解析一下,然后再调用具体的功能。这样对daemon中功能的调用只有一个入口,daemon中改动再大,只要这个入口不动就不需要修改其他程序。而且整个系统的状态数少,好分析。
作者: cjaizss    时间: 2008-03-02 00:19
当然是socket,而且就用TCP/IP,而非domain socket,因为可能要跨机
作者: zjtjs    时间: 2008-03-02 00:27
有没有直接封装好的库之类,程序中可以直接像调用函数一样使用,不用再去考虑协议、线程等等问题的?
作者: cjaizss    时间: 2008-03-02 00:28
.......没有协议,怎么通信.......
作者: zjtjs    时间: 2008-03-02 00:52
程序只管调用封装的函数,比如daemon中提供的SendSomething函数,调用时直接很直观地调用该函数,不用再去实现Socket的连接,发送接收格式等。
作者: yuanchengjun    时间: 2008-03-02 09:04
标题: 可以
com是基于windows做的,但是com原理是c++的,c语言也可以调用,为什么?
你看一下windows com那几个头文件,定义是两份,一份c,一份c++,你应该看不出来为什么,推荐一本书《com本质论》
简单的说,com是c和c++共有的对象调用二进制接口。

建议丢掉com吧,这个和c++编译器的面向对象效果实现方式是相关的。

[ 本帖最后由 yuanchengjun 于 2008-3-2 09:13 编辑 ]
作者: lenovo    时间: 2008-03-02 10:25
CORBA
作者: cugb_cat    时间: 2008-03-02 11:01
原帖由 zjtjs 于 2008-3-2 00:52 发表
程序只管调用封装的函数,比如daemon中提供的SendSomething函数,调用时直接很直观地调用该函数,不用再去实现Socket的连接,发送接收格式等。

要自己封装吧。
作者: flw    时间: 2008-03-02 11:41
man rpcgen
作者: reiase    时间: 2008-03-02 12:06
LZ要作什么?见以前同学做Raid的Web管理界面跟这很像
作者: zjtjs    时间: 2008-03-02 14:21
想基于libPurple做个Daemon,Login几个QQ、MSN帐户,然后由PHP或别的进程指挥它发消息等。PHP和这个Daemon之间通讯可以用Socket、共享内存、消息队列,但是都要自己做些封装,我想能有现成的库实现这个功能。对我来说RPC的功能可能稍微强了点,我只需要在同一台机器上的不同进程间调用。
作者: zhujiang73    时间: 2008-03-02 15:08
原帖由 zjtjs 于 2008-3-2 00:08 发表
想在LINUX下用C做一个DAEMON,在另一个或多个C或PHP实现的程序中调用该DAEMON中的函数,读取某些状态或指挥DAEMON去做一些事情,类似RPC或WIN32下COM的功能,但是不一定要通过网络跨主机,在同一台主机上实现就 ...


看来是想要一个使用简单的远程调用机制,目前的远程调用机制还在半自动时代,不过也有相对简单的,看看这个:  http://www.zeroc.com/ice.html

我认为理想的远程调用机制应该类似于这个:


  1. 本地调用代码:
  2. // use local object:
  3. X x;
  4. A a;
  5. std::string s("abc");
  6. // …
  7. x.f(a, s);

  8. 使用远程调用:
  9. // use remote object :
  10. proxy<X> x;
  11. x.connect("my_host");
  12. A a;
  13. std::string s("abc");
  14. // …
  15. x.f(a, s);
复制代码


有文章说 C++ 0x keynote 中有此类描述, 仅使用一个包装层就完成远程调用,简单好用。不过现在没实现。  要实现这个,需要编译器做很多工作。
作者: zjtjs    时间: 2008-03-04 11:02
*nix下用到Socket应该非常多的,没人想过封装一下,做个现成的出来吗?
作者: flw    时间: 2008-03-04 11:12
原帖由 zjtjs 于 2008-3-4 11:02 发表
*nix下用到Socket应该非常多的,没人想过封装一下,做个现成的出来吗?

前面已经告诉过你了,man rpcgen
作者: sssslang    时间: 2008-03-04 21:42
原帖由 zjtjs 于 2008-3-2 14:21 发表
想基于libPurple做个Daemon,Login几个QQ、MSN帐户,然后由PHP或别的进程指挥它发消息等。PHP和这个Daemon之间通讯可以用Socket、共享内存、消息队列,但是都要自己做些封装,我想能有现成的库实现这个功能。对 ...


可不可以用dbus?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2