主进程源码:
#include
#include
#include
#include
TCHAR g_ShareMemCMD[] = "testipc/buf";
const int g_ShareMemSize = 512;
int main( void )
{
STARTUPINFO si={sizeof(si)};
ZeroMemory( &pi, sizeof(pi) );
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
TCHAR
//个参数传给CreateProcess
if(CreateProcess(chPath, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi))
{
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
else
{
printf("%s","Child process created faild!\n");
}
void * m_hMapCMD = NULL;
SECURITY_ATTRIBUTES SecAttr;
SECURITY_DESCRIPTOR SecDesc;
SecAttr.nLength = sizeof(SecAttr);
SecAttr.bInheritHandle = FALSE;
SecAttr.lpSecurityDescriptor = &SecDesc; //指向访问权限列表
InitializeSecurityDescri
SetSecurityDescriptorDac
m_hMapCMD = CreateFileMapping(
INVALID_HANDLE_VALUE,
&SecAttr,
PAGE_EXECUTE_READWRITE,
0,
g_ShareMemSize,
g_ShareMemCMD);
if (NULL == m_hMapCMD)
{
}
void * m_pCMDBuf =
m_pCMDBuf = (char*) MapViewOfFile(m_hMapCMD, FILE_MAP_ALL_ACCESS, 0, 0, g_ShareMemSize);
if (NULL == m_pCMDBuf)
{
}
int * p = (int*)m_pCMDBuf;
*p = 123454321;
printf("shareMemery id is : %d\n", *p);
printf(" 新进程的主线程ID号:%d /n", pi.dwThreadId);
Sleep(1000);
int j = 5;
while(j--)
{
}
while(true){
GetLocalTime( &sys );
printf("%s","The parent is talking at ");
printf( "M/d/d d:d:d 星期\n", sys.wYear,
Sleep(2000);
}
return 0;
}
子进程源码:
#include
#include
TCHAR g_ShareMemCMD[] = "testipc/buf";
const int g_ShareMemSize = 512;
int main( void )
{
printf("child process!");
DWORD threadId = GetCurrentThreadId();
printf("%d\n", threadId);
void * m_hMapCMD = NULL;
m_hMapCMD = OpenFileMapping(
if (NULL == m_hMapCMD)
{
}
void * m_pCMDBuf =
m_pCMDBuf = (char*) MapViewOfFile(m_hMapCMD, FILE_MAP_ALL_ACCESS, 0, 0, g_ShareMemSize);
if (NULL == m_pCMDBuf)
{
}
int * p1 = (int*)m_pCMDBuf;
printf("shareMemery id is : %d\n", *p1);
SYSTEMTIME sys;
while(true){
GetLocalTime( &sys );
printf("%s","The child is talking at ");
printf( "M/d/d d:d:d 星期\n", sys.wYear,
Sleep(2000);
}
return 0;
}