, shm_open, : , shm_open . shm_unlink, , .
deslash_shm.cc:
#include <dlfcn.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <algorithm>
#include <string>
extern "C" int shm_open(const char *name, int oflag, mode_t mode)
{
static int (*real_open)(const char *, int, mode_t) = NULL;
if (!real_open) real_open = (int (*)(const char *, int, mode_t)) dlsym(RTLD_NEXT,"shm_open");
std::string n = name;
std::replace(n.begin(), n.end(), '/', '_');
return real_open(n.c_str(), oflag, mode);
}
extern "C" int shm_unlink(const char *name)
{
static int (*real_unlink)(const char *) = NULL;
if (!real_unlink) real_unlink = (int (*)(const char *)) dlsym(RTLD_NEXT, "shm_unlink");
std::string n = name;
std::replace(n.begin(), n.end(), '/', '_');
return real_unlink(n.c_str());
}
:
c++ -fPIC -shared -o deslash_shm.so deslash_shm.cc -ldl
, shm_open:
bash:
export LD_PRELOAD=/path/to/deslash_shm.so
tcsh:
setenv LD_PRELOAD /path/to/deslash_shm.so