| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | hzShmem::Init | (const char*,unsigned int,unsigned int,) |
Declared in file: hzProcess.h
Defined in file : hzProcess.cpp
Function Logic:
Function body:
hzEcode hzShmem::Init (const char* name, unsigned int size, unsigned int mask)
{
_hzfunc("hzShmem::Init") ;
if (m_name)
{
hzerr(E_INITDUP, "Shared memory segment %s already initialized", *m_name) ;
return E_INITDUP ;
}
if (!name || !name[0])
{
hzerr(E_ARGUMENT, "No name supplied") ;
return E_ARGUMENT ;
}
m_name = name ;
m_size = ((size/4096)+1)*4096;
m_perm = mask ;
// Open shared memory
m_fd = shm_open(name, O_RDWR | O_CREAT, 0666);
threadLog("Set fd to %d\n", m_fd) ;
if (ftruncate(m_fd, m_size) != 0)
{
hzerr(E_INITFAIL, "Shared memory could not be sized to %d bytes", m_size) ;
return E_INITFAIL ;
}
threadLog("Set size to %d\n", m_size) ;
m_pStart = mmap(0,m_size, PROT_READ | PROT_WRITE, MAP_SHARED, m_fd, 0);
if (!m_pStart || m_pStart == (void*)-1)
{
hzerr(E_INITFAIL, "Shared memory address at %p errno is %d\n", m_pStart, errno) ;
return E_INITFAIL ;
}
threadLog("mem at %p\n", m_pStart) ;
return E_OK ;
}