home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
sftick.zip
/
adv
/
mem
/
SHARED.C
< prev
next >
Wrap
Text File
|
1994-04-21
|
3KB
|
122 lines
#define INCL_DOS
#include <os2.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void ) ;
#define QUEUE "\\QUEUES\\CHILD.QUE"
int main()
{
PVOID pSharedMem ;
APIRET rc ;
ULONG ulFlags ;
ULONG ulSize ;
ULONG ulSession ;
PID pidProcess ;
HQUEUE hqQueue ;
STARTDATA sdSession ;
CHAR achFail[200] ;
REQUESTDATA rdRequestData ;
ULONG ulDataGone ;
PVOID pData ;
BYTE bPriority ;
ulSize = 4096 ;
ulFlags = PAG_COMMIT | PAG_WRITE | PAG_READ ;
rc = DosCreateQueue( &hqQueue,
QUE_FIFO| QUE_CONVERT_ADDRESS,
QUEUE ) ;
printf("\nrc from DosCreateQueue = %d", rc ) ;
/* allocate some shared memory */
rc = DosAllocSharedMem( &pSharedMem,
"\\SHAREMEM\\MEMNAME",
ulSize,
ulFlags ) ;
printf("\nrc from Alloc = %d, address = %p",
rc, pSharedMem ) ;
/* this is so the printf shows up immediately */
fflush( stdout ) ;
if (pSharedMem){
strcpy( pSharedMem, "Hello, Dave" ) ;
printf("\nString = %s", pSharedMem ) ;
fflush( stdout ) ;
}
/* start the program that will get the shared memory */
sdSession.Length = sizeof (STARTDATA ) ;
sdSession.Related = SSF_RELATED_CHILD ;
sdSession.FgBg = SSF_FGBG_FORE ;
sdSession.TraceOpt = SSF_TRACEOPT_NONE ;
sdSession.PgmTitle = "Shared Memory Program" ;
sdSession.PgmName = 0 ;
sdSession.PgmInputs = " /C sharee.exe" ;
sdSession.TermQ = QUEUE ;
sdSession.Environment = 0 ;
sdSession.InheritOpt = SSF_INHERTOPT_PARENT ;
sdSession.SessionType = SSF_TYPE_WINDOWABLEVIO ;
sdSession.IconFile = 0 ;
sdSession.PgmHandle = 0 ;
sdSession.PgmControl = SSF_CONTROL_SETPOS ;
sdSession.InitXPos = 10 ;
sdSession.InitYPos = 10 ;
sdSession.InitXSize = 300 ;
sdSession.InitYSize = 100 ;
sdSession.Reserved = 0 ;
sdSession.ObjectBuffer = achFail ;
sdSession.ObjectBuffLen = 200 ;
/* start sessions */
rc = DosStartSession( &sdSession,
&ulSession,
&pidProcess ) ;
/* wait until session is ended */
rc = DosReadQueue( hqQueue,
&rdRequestData,
&ulDataGone,
&pData,
0,
DCWW_WAIT,
&bPriority,
NULLHANDLE ) ;
DosCloseQueue( hqQueue ) ;
/* clean up */
if (pSharedMem) {
rc = DosFreeMem( pSharedMem ) ;
printf("\nrc from DosFreeMem = %d", rc ) ;
} /* endif */
printf("\nPress any key..." ) ;
fflush( stdout ) ;
/* wait for a keypress */
getchar() ;
return ( 0 );
}