2012-12-12 8 views
7

पर कॉल करें मेरे पास एक प्रक्रिया के लिए एक सेवा है जिसे मैं बूट-टाइम पर शुरू नहीं करना चाहता हूं, लेकिन इसे किसी अन्य तरह से पहले से चल रहे एप्लिकेशन से कॉल करने के लिए, एक निश्चित समय पर।सी/सी ++ एप्लिकेशन से सिस्टमड सेवा शुरू करें या डी-बस सेवा

दूसरा विकल्प डी-बस (मैं अपने ऐप्स में ग्लिब डीबीस का उपयोग कर रहा हूं) सेवा फ़ाइल/usr/share/dbus-1/सेवाओं में डाल सकता हूं और किसी भी तरह से इसे अपने एप्लिकेशन से कॉल कर सकता हूं। इसके अलावा, मैं इसे भी करने का प्रबंधन नहीं करता हूं।

मान लें कि /usr/share/dbus-1/services से मेरी dbus सेवा फ़ाइल com.callThis.service और से /lib/systemd/system is com.startThis.service

अपने मुख्य सेवा फ़ाइल तो मैं कमांड लाइन से एक सरल INTROSPECT चलते हैं:

/home/root # dbus-send --session --type=method_call --print-reply \ 
--dest=com.callThis /com/callThis org.freedesktop.DBus.Introspectable.Introspect 

डी-बस सेवा फ़ाइल कॉल किया जाएगा और यह Exec (com.starThis) में क्या शुरू होगा। समस्या यह है कि मैं डी-बस ग्लिब का उपयोग कर सी/सी ++ कोड से इसे प्राप्त करना चाहता हूं।

+0

क्या आपने इसे लागू करने का प्रयास किया था? आपके द्वारा किए गए कुछ पहले चरण दिखाएं। दस्तावेज़ीकरण और यहां तक ​​कि एक उदाहरण भी पाया जा सकता है http://developer.gnome.org/gio/2.30/GDBusConnection.html – drahnr

+1

http://www.freedesktop.org/wiki/Software/systemd/dbus/ यहां जानकारी है 'systemd' डीबीयूएस एपीआई –

उत्तर

0

मुझे एक ही चीज़ करने में परेशानी थी। की खोज: G_BUS_NAME_WATCHER_FLAGS_AUTO_START इसे हल करें।

g_bus_watch_name(G_BUS_TYPE_SYSTEM, "com.mydbus.listen", 
     G_BUS_NAME_WATCHER_FLAGS_AUTO_START, xOnNameAppeared, xOnNameVanished, 
     this, nullptr); 
संबंधित मुद्दे