| | |
| | | #include "bh_api.h" |
| | | #include "defs.h" |
| | | #include "topic_node.h" |
| | | #include <cstdio> |
| | | #include <memory> |
| | | |
| | | using namespace bhome_shm; |
| | |
| | | |
| | | namespace |
| | | { |
| | | std::string GetProcExe() |
| | | { |
| | | auto f = fopen("/proc/self/stat", "rb"); |
| | | if (f) { |
| | | DEFER1(fclose(f)); |
| | | char buf[100] = {0}; |
| | | int n = fread(buf, 1, sizeof(buf), f); |
| | | if (n > 0) { |
| | | std::string s(buf, n); |
| | | auto start = s.find('('); |
| | | if (start != std::string::npos) { |
| | | ++start; |
| | | auto end = s.find(')', start); |
| | | return s.substr(start, end - start); |
| | | } |
| | | } |
| | | } |
| | | return std::to_string(getpid()); |
| | | } |
| | | std::unique_ptr<TopicNode> &ProcNodePtr() |
| | | { |
| | | static bool init = GlobalInit(BHomeShm()); |
| | | auto InitLog = []() { |
| | | auto id = GetProcExe(); |
| | | char path[200] = {0}; |
| | | sprintf(path, "/tmp/bhshmq_node_%s.log", id.c_str()); |
| | | ns_log::AddLog(path); |
| | | return true; |
| | | }; |
| | | static bool init_log = InitLog(); |
| | | static std::unique_ptr<TopicNode> ptr(new TopicNode(BHomeShm())); |
| | | return ptr; |
| | | } |
| | | TopicNode &ProcNode() |
| | | { |
| | | static bool init_bind_msg_shm = MsgI::BindShm(BHomeShm()); |
| | | static TopicNode node(BHomeShm()); |
| | | return node; |
| | | return *ProcNodePtr(); |
| | | } |
| | | |
| | | class TmpPtr : private boost::noncopyable |
| | |
| | | free(data); |
| | | } |
| | | |
| | | int BHCleanup() |
| | | { |
| | | ProcNodePtr().reset(); |
| | | return 0; |
| | | } |
| | | |
| | | int BHGetLastError(void **msg, int *msg_len) |
| | | { |
| | | int ec = 0; |