

       .    .       "OS/2 "                11


                         

     *  ࠧ塞 
     * न 㯠  ࠧ塞 
     * ᮭ쭠 ࠧ塞 
     * 㡪
     * 㡪  ॠ
     * ।
     * ⥭    ।
     * ।  ਮ



         ᭮       ࣠樨   -
⢨  ᠬ - ࠧ塞 , 㡪  ।.  
⮩   ᬮਬ   堭.

         ᥬ  ⠪    ⭮    ।⢠   -
⢨   ᠬ. ,   ᥬ,   ᨣ ।
ଠ ᪮॥  ﭨ,  ᠬ ,  ⮬  ᪮॥
᫥   ⭥                            
ᠬ.  ।⢠    묨    ᠬ,   
ᬮਬ    ⮩ ,   ࠡ   ࠧ묨  '
 -  ⪮   .

     ⢥ ⨯  묨, 뢠       , ,
㤥 㯥      OS/2,   饥  ६ 
 ७.

     堭,      㤥  ᬠਢ , ⭮ 
⢨   ᠬ.   ,   ࠢ,  ᯮ
 ⢨  ᥪﬨ (       
ᯮ짮  )  ᪮          
ᯥ稢  ஥    㤮  ⢨    ᥪﬨ.  
㣮 ஭,  ࠧ  ஢   㣠.  
⮫쪮    த 㣮,     ⠭  
⢥ 痢.  ६ ᮧ -த⥫  ।
- ஦     ப   ६ 㦥, 
稭    ⮣      ࣠樨 ⢨  
᫥  ᯮ짮  ᯥ樠  堭.   ⢨  
ᠬ,    易묨  ⭮襭  "஦騩  - ஦",
࣠      ᫮.   ⮬    室   堭
ᯥ樠쭮  ࣠樨 ⢨  ᠬ.

       筥    ⪮    ࠧ  ⮤   ࣠樨
⢨    ᠬ,       ⥬       ࠪ
ਬ.

                                 

     祬     ਤ㬠  ࠧ   ᯮᮡ  ࣠樨   -
⢨    ᠬ  ?            ࠧ
.

                          

     塞    -    ⥩訩    ३訩 ᯮᮡ 
।  .          ,  饭  ,   
ணࠬ    墠  ᥣ  .   ᫨   墠
ࠧ塞  ᥣ,  㣮    ⠪     
  ந, ⠪ ࠧ,  묨.

     塞    ᯥ稢    ,   ᪮
      ࣠    ᥣ    㣮,   
७  ᠬ. ਬ, ࠧ塞 ᥣ  
    ᯮ짮    ࠭  ᮤন  祥 ⠡, 
ன   ࠡ⠥    ਪ   ணࠬ.      㣨    ,
㭪樮騥   ணࠬ, , ਬ,  
  ⠡,  뢠,  뢮  ଠ,    䨪   
  ⠡,               
室.     堭 ࠧ塞    
  ᯥ  ᥡ  ந         ᥬ
ᥣ .

     塞            ஥묨    堭
ᨭ஭樨,  ⮬      ᠬ  न஢   ᢮
⥫쭮  (     ᯮ짮   ⥬  ᥬ஢)   
ᯥ祭  楫⭮  .   ,  -  ᢮    
᪮,  ࠧ塞             ப
ᯮ㥬 ᯮᮡ ࣠樨 ⢨  ᠬ.

          

     㡪  ᯮ    ப  ⮣,    ⮪ 
७砥   ⠭⭮ ன⢠     뢮. 㡪
   ᠬ,        짮⥫,     ॠᮢ
㯠騥     㣮  .     㢥稢   
堭 ॠ樨.

     㡪    ⮪    ᯮ ⠭
㭪樨 䠩 /뢮 DosRead()    DosWrite()  ⥭   
 .   ,  㡪 祭 宦  䠩.

     㡪 , 祬 ࠧ塞 , ᪮  ।
ଠ      㡪.   㡪  ⠪  ࠭祭 '
  65, ᪮     ॢ  ᥣ.   
।  ,   㡪 ࠬ , ᮤঠ騬
⮪  -  㦨   樯 FIFO (   襫 -
 襫 ).

           

     ।  -          ᯮᮡ ⢨
 ᠬ.      㦨    ,
᪮   ࠭祭  ᥣ⮬.    । 
 ࠧ  ࠧ -  FIFO, LIFO  ( ᫥  襫 -  
襫 )   ਮ.

      ।  ࠧ ।祩 ,   ஢
ᠬ  ,      ந室    㡪.     ।
ன.  । ᫥  ।  ⮬ 砥,   室
 । 讥 ⢮ .

     ।  ᯮ  ⠪  ⮣,       砥
   ᪮쪨 㣨  ᮢ.   ਬ஬  ணࠬ
    ,    ᯮ  ࠧ  
ᡮ  ᯥਬ⠫  .          뫠
,  १  ।,  -,      ⥬
   ।   ਥ 浪.

     㣨   ਬ஬      ணࠬ-⨫,   㦨
᪮쪮   㣨   ᮢ       ⥬.             
ணࠬ-४  ࠢᠭ,        ६
맢 ⥪⮢ ஬  ।஬   ਡ⥫쭮 
     ६.     㦨   饭  
।,   㤠              祭        㦥
ணࠬ-४஬.

     ।    ᫮     ࣠樨,  祬  㣨   ᯮᮡ
࣠樨  ⢨    ᠬ,    ॡ   襣
஢   ४⭮ 㭪樮஢  ⥬.  ᪮
।  ࣠    ࠧ塞  ᥣ,  ᥣ ᫥
  ࠢ쭮 ࠡ뢠,  न   .   ⮬
  ᫥  ᯮ짮  ।    ।  ᪮쪨 ⪨
ᮮ饭.

          

       ४᭮  ᯮ짮  䠩    ᪥   ࣠樨
  ᠬ.   ᮢ 뢠    ,
  㣮  ⠥  .  ,    १    ⥫쭮 
, 祬 ᯮᮡ    ᠬ, 㦤   
,      ᯮ ⨢    ।
.   ஬   ⮣,  ࣠   䠩     ᪥     
⥩  堭      ᠬ  OS/2,  ⠪, 
ந      ࠧ塞  ,    㯮冷稢   
न 㯠  ।.

      ,    ᢮  ।,   ᬠਢ ࠧ塞   ,
㡪  ।.


                         

         室    ࠧ      ᠬ.
-,   ᯮ짮 㭪  DosAllocShrSeg()   ᮧ
ࠧ塞  ᥣ      ᢠ   .  ⮫쪮
ᮧ ⠪     ᥣ,      
  , 騩   .      ""
室     ࠧ  .         㦨   ᪠
'.  直,  ,    ,  ன   
 ᮮ饭, 饭  ,      ᢮
ᮮ饭,  ⮡    竨  㣨.     ⮤   
  ᯮ.    뢠    㯮 
ࠧ塞 ,    ⠪ 뢠  "쭮"  ࠧ塞
, ..  , 騩   ,     
.

     ன   室      ࠧ塞      ᯮ   㭪
DosAllocSeg().  ᯮ  㭪 筮 ⠪   ࠧ,
      墠  ࠧ塞  ᥣ  .    
 ᮡ⢥ ᥣ   ஫ 类  த
    .  ᫨  㣮           
ࠧ塞  ,    ᥣ    㧭 䨪
,  뤠饣     (  "樯"  ).       ⥬
ᯮ  䨪   祭 ᯥ樠쭮  ᥣ⭮
,       ।   樯,        樯
        ࠧ塞  ᥣ.     
 "" ᯮᮡ 㯠  ࠧ塞 ᥣ.   ࠧ
  來   ।⠢       ࠦ   ᭮,
ࠧ      饭   ⮫쪮 ᫥ ஢ન
襩 筮.

           ᮭ쭮 ࠧ塞  .  
⠪ 뢠  "⤠"   "쭮"   ࠧ塞 ,
᪮ -ᮡ⢥ "⤠"   ࠧ塞 ᥣ,
 ᠬ ᥣ ⥭ ⮫쪮 ࠭祭  ᮢ.

     ᮭ쭠 ࠧ塞         ਬ 
।.  ⠪   ᯮ짮   ⢨  
ᮢ,    砩  ࠭ 楫⭮ .  
ࠡ  ,  ਬ,         ࠧ
  ᥣ ⮫쪮 ᠬ, 騬 ࠢ ஫.

Ŀ
                      Ŀ                                    
                                                            
                                                          
                                                                    
                     Ŀ                                 
    Ŀ             Ŀ                 
      Ĵ             Ĵ                   
             ᥣ                         
                                                      
                                                                     
                                                                     
     ⨥ ࠧ塞    DosAllocShrSeg()          
                                                                     
                                                                     
    Ŀ                                                      
      Ŀ                    Ŀ          
            Ŀ                             
    Ŀ       Ĵ                             
      Ĵ    Ĵ                        
           Ĵ                                  
    Ŀ                                     
                                    
                                                          
  ᢮ ࠧ塞    DosAllocSeg()           
                          DosGiveSeg()                               


            11.1 뢠   室  ࠧ塞  .


      ᫥饩   ᬮਬ  ஡   .


       : DosAllocShrSeg()

       ᯮ짮  堭    ࠧ塞  
    ᮢ  ᮧ  ࠧ塞  ᥣ     㭪樨
DosAllocShrSeg().      㭪  祭   宦     DosAllocSeg().
,      墠뢠   ᥣ   ,  DosAllocShrSeg()
ᢠ  .     宦    䠩.  稭  
 ४ਨ \SHAREMEM\.   ணࠬ     ᠬ,
  롮.    १   - த \SHAREMEM\DATA.SEG.
    箬,  ஬      
 ᥣ   㭪樨 DosGetShrSeg().

       ਬ   ⮨       ᮢ.    -த⥫,
pshare.c, ᮧ ᥣ     \SHAREMEM\SEG1.DAT.   
    ,    ६  ﬨ  .  ⥫ 頥
  ᥣ  ஦ ୨ .      
ᥪ㭤,  ⮡    ६    㯠    ᥣ   ஦
ᮬ. ᫥ ⮣   蠥 ᥣ  蠥  ࠡ. 
 ⥪ :

/* pshare.c */
/* ࠧ    DosAllocShrSeg()              */
/* ᯮ짮 ᮢ⭮  ஦ ᮬ chshare.c */
#define INCL_DOS
#include <os2.h>
#define LENGTH  40      /*    '          */
#define FLAGS    1      /*   ᨭ஭,  ᫥          */
#define COMS    0L      /*  㬥⮢  ப     */
#define ENVS    0L      /*  譨 ६ 㦥    */
                        /* ࠧ ࠧ塞 ᥣ  */
#define SEG_SIZE sizeof(struct SharedData)
main()
{
char fbuf[LENGTH] ;              /*   䠩-'     */
struct _RESULTCODES childID ;    /*   ।  bsedos.h     */
unsigned rc ;                    /*                  */
unsigned short Selector ;        /* ᥣ.  ࠧ. ᥣ  */
struct SharedData                /* ᮤন ࠧ. ᥣ   */
  {
  char DataOne ;
  int  DataTwo ;
  long DataThree ;
  }
struct SharedData far *fptr ;    /* -  ࠧ塞  */
                            /*    ࠧ塞  ᥣ  */
if( rc = DosAllocShrSeg( SEG_SIZE,
                             "\\SHAREMEM\\SEG1.DAT", &Selector ) )
  {
  printf( "DosAllocShrSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
                  /*  㪠⥫  ࠧ塞 ᥣ */
fptr = (struct SharedData far *)( (unsigned
                                        long)Selector << 16 ) ) ;
fptr->DataOne = 'a' ;           /* ᨬ   ࠧ.ᥣ. */
fptr->DataTwo = 300 ;
fptr->DataThree = 999000 ;
                                  /* த ୨  */
if( rc = DosExecPgm( fbuf, LENGTH, FLAGS, COMS, ENVS,
                                      &childID, "chshare.exe" ) )
  {
  printf( "DosExecPgm error = %u\n", rc ) ;
  exit( 1 ) ;
  }
DosSleep( 1000L ) ;            /*  ६           */

                                         /* ᢮ ᥣ */
if( rc = DosFreeSeg( Selector ) )
  {
  printf( "DosFreeSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
exit( 0 ) ;
}

     㭪 DosAllocShrSeg()    ࠬ.       -
  ࠧ  墠뢠  ᥣ,    ன  -   , ஥
᫥    ᢮.     㦥  㪠뢠  ࠭,    
㪠    ४ਨ  \SHAREMEM\.   (    "⭠  
"  ।⠢    몥  C   ᨬ, ..  
ਧ 砫 Esc-᫥⥫쭮 ) ⨩ ࠬ -   
祩,  ன 㭪 ୥ ᥣ .

     DosAllocShrSeg - १ࢨ஢ ࠧ塞 ᥣ
Ŀ
    DosAllocShrSeg( Size, Name, ASelector ) ;                 
    unsigned Size ;                 /* ࠧ. ᥣ.  - */ 
    char far *Name ;                /* ASCIIZ  ᥣ */ 
    unsigned short far *ASelector ; /* 祩  ᥣ..*/ 


     ஦   砥    ࠧ塞  ᥣ 
 , ⠥ ,   室 ⠬, 蠥 ᥣ
 蠥 ࠡ.   ⥪ :

/* chshare.c */
/* 砥  १ ࠧ塞 ᥣ  ⠥   */
/* ୨   ⭮襭  pshare.c */
#define INCL_DOS
#include <os2.h>
main()
{
struct SharedData                /* ᮤন ࠧ. ᥣ   */
  {
  char DataOne ;
  int  DataTwo ;
  long DataThree ;
  }
struct SharedData far *fptr ;    /* -  ࠧ塞  */
                            /*    ࠧ塞  ᥣ  */
if( rc = DosGetShrSeg( "\\SHAREMEM\\SEG1.DAT", &Selector ) )
  {
  printf( "DosGetShrSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
                  /*  㪠⥫  ࠧ塞 ᥣ */
fptr = (struct SharedData far *)( (unsigned
                                        long)Selector << 16 ) ) ;
                  /*    ᥣ    */
printf( "DataOne = %c\n", fptr->DataOne ) ;
printf( "DataTwo = %d\n", fptr->DataTwo ) ;
printf( "DataThree = %ld\n", fptr->DataThree ) ;
                                         /* ᢮ ᥣ */
if( rc = DosFreeSeg( Selector ) )
  {
  printf( "DosFreeSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
exit( 0 ) ;
}

        稬  ࠭ ᫥ 믮 ਬ :


     DataOne = a
     DataTwo = 300
     DataThree = 999000


     筮,             ᫮
ன: ᨢ, ᯨ᪮  ..

     ஦  砥   ᥣ    㭪樨
DosGetShrSeg().    㭪     ࠬ:    ᥣ  
,    ஬  ᫥  ᯮ 稭 ᥣ⭮ 
ࠧ塞 ᥣ.   ,   稭 ⫨筠 
⮩,    㤥     㣮  ,  稢訩     
ࠧ塞  ᥣ.     ந室  ⮣,    
 ᢮ ᮡ⢥  ⠡ ⥫,   ᮤন
ᯨ᮪ ᥣ⮢,       ,   㪠
ᮢ, 㭨   .
Ŀ
    DosGetShrSeg -    㦥 饬 ࠧ-       
    塞 ᥣ                                          
                                                                    
    DosGetShrSeg( Name, ASelector ) ;                               
    char far *Name ;                /* ASCIIZ   ᥣ.   */       
    unsigned short far *ASelector ; /*   㪠⥫ */       


       

     樮 ⥬ ࠭ ᯨ᮪ ࠧ塞 ᥣ⮢.  
    ⮣  ᯨ᪠      ᢮  ⠢ 稪, 
㢥稢 直 ࠧ,   -  砥   
ᥣ   㭪権 DosAllocShrSeg()  DosGetShrSeg().  
  ᢮  ᥣ      DosFreeSeg(),   稪
㬥蠥.   ⠭ ࠢ 0, ⥬ ᢮ ᥣ
 㤠     ᯨ᪠.

     ⮬   ,   ⮡      ,   訩    
ࠧ塞  ᥣ,  믮  맮  DosFreeSeg()    襭
ࠡ  ᥣ⮬. ᫨    ᤥ ⮣, ⥬   ᬮ
㧭  ⮬,  ࠧ塞 ᥣ   㦥. ⮬  
ᥣ ⠭   ,  ,   ⥬   
ᯮ廊  襩 짮.

          

      ਬ  pshare.c   chshare.c, न  뫠 ⨣  
  প,  祬  १  ࠧ塞 ᥣ । ⮫쪮
  㯯  .       ᫨誮  ॠ  ᯮᮡ न樨
㯠  ᥣ.    ᫥饬 ਬ   ,   ।
⢥           ᮢ襭 ⮤
न樨 㯠.

      㦥 ᬮ५    10,    ᥬ  -  㪠
        -  ᯮ짮    न樨
⢨ ᪮쪨 ᮢ,       䠩.    
ਬ   室   न樨 ।  ⢥
 १ ࠧ塞 ᥣ .

      ਢ ⥪ ஦饣 .   來  
㤠 ࠡ 訡,       ந.
 ஦騩,   ஦      ᪮஢  
      LARGE,    ᪮     ᯮ   ⠭
   ணࠬ  C  strcpy(),  ॡ  쭨  ( far )
㪠⥫.

/* pshstr.c */
/* ᯮ짮 ᮢ⭮  ஦ ᮬ chshstr.c */
/* ஢    LARGE  樥 -AL        */
#define INCL_DOS
#include <os2.h>
#define LENGTH   40     /*    '          */
#define FLAGS     1     /*   ᨭ஭,  ᫥          */
#define COMS     0L     /*  㬥⮢  ப     */
#define ENVS     0L     /*  譨 ६ 㦥    */
#define SEG_SIZE 80     /* ࠧ ࠧ塞 ᥣ  */
#define LINES     4     /*          ᫮ ப ⥪         */
#define WAIT    -1L     /*          ᥬ       */
#define NO_EX     1     /* ᥬ   筮 ᮡ⢥   */

char *msg[LINES] =
  {
  " - ᮮ饭",
  " ஦饣 ",
  "஦",
  "१ ࠧ塞 ."
  } ;

main()
{
char fbuf[LENGTH] ;              /*   䠩-'     */
struct _RESULTCODES childID ;    /*   ।  bsedos.h     */
unsigned short Selector ;        /* ᥣ.  ࠧ. ᥣ  */
char far *fptr ;                 /* -  ࠧ塞  */
void far *FullSem ;              /* -  ᥬ "" */
void far *EmptySem ;             /* -  ᥬ ""     */
int j ;                          /*        ப       */

                        /*      ᮧ ⥬ ᥬ      */
DosCreateSem( NO_EX, &FullSem, "\\SEM\\S1" ) ;
DosCreateSem( NO_EX, &EmptySem, "\\SEM\\S2" ) ;
DosSemClear( EmptySem ) ;        /*                    */
DosSemSet( FullSem ) ;           /*                     */
                            /*    ࠧ塞  ᥣ  */
DosAllocShrSeg( SEG_SIZE,"\\SHAREMEM\\SEG1.DAT", &Selector ) ;
                  /*  㪠⥫  ࠧ塞 ᥣ */
fptr = (char far *)( (unsigned long)Selector << 16 ) ) ;
                                  /* த ୨  */
DosExecPgm( fbuf, LENGTH, FLAGS, COMS, ENVS,
                                      &childID, "chshstr.exe" ) ;
for( j = 0 ; j < LINES ; j++ )    /*  . ப ᮮ-  */
  {
  DosSemRequest( EmptySem, WAIT ) ;  /*  ᥬ ""*/
  strcpy( fptr, msg[j] ) ;        /*  ப  ᥣ*/
  printf( "஦騩  뫠 : %s\n", fptr ) ;
  DosSemClear( FullSem ) ;        /*        ᥣ    */
  }
DosCloseSem( FullSem ) ;          /*        ᥬ    */
DosCloseSem( EmptySem ) ;
DosFreeSeg( Selector ) ;          /*      ᢮ ᥣ   */
exit( 0 ) ;
}

     ஦    ᥬ "", ⠥ ⥪  
ࠧ塞 ᥣ   ⮡ࠦ     ࠭, ⥬  뢠
ᥬ "", ⮡ 㪠  ,  ᥣ   ⮢  ਭ
 .  ⢨  ᠬ த    ,
   ।  ப ᮮ饭.


/* chshstr.c */
/* 砥  १ ࠧ塞 ᥣ  ⠥   */
/* ୨   ⭮襭  pshstr.c */
#define INCL_DOS
#include <os2.h>
#define LINES     4     /*          ᫮ ப ⥪         */
#define WAIT    -1L     /*          ᥬ       */

main()
{
void far *FullSem ;              /* -  ᥬ "" */
void far *EmptySem ;             /* -  ᥬ ""     */
unsigned short Selector ;        /* ᥣ.  ࠧ. ᥣ  */
char far *fptr ;                 /* -  ࠧ塞  */
int j ;                          /*        ப       */
                            /*    ࠧ塞  ᥣ  */
DosGetShrSeg( "\\SHAREMEM\\SEG1.DAT", &Selector ) ;
                  /*  㪠⥫  ࠧ塞 ᥣ */
fptr = (char far *)( (unsigned long)Selector << 16 ) ) ;
                  /*    ᥣ    */
for( j = 0 ; j < LINES ; j++ )    /*  . ப ᮮ-  */
  {
  DosSemRequest( FullSem, WAIT ) ;  /*  ᥬ
                                                        ""*/
  printf( "஦  稫  : %s\n", fptr ) ;
  DosSemClear( EmptySem ) ;        /*        ᥣ        */
  }
DosFreeSeg( Selector ) ;          /*      ᢮ ᥣ   */
exit( 0 ) ;
}

        㢨  ࠭, ⨢ pshstr.c :


     C>pshstr
     ஦騩  뫠 :  - ᮮ饭
     ஦  稫  :  - ᮮ饭
     ஦騩  뫠 :  ஦饣 
     ஦  稫  :  ஦饣 
     ஦騩  뫠 : ஦
     ஦  稫  : ஦
     ஦騩  뫠 : १ ࠧ塞 .
     ஦  稫  : १ ࠧ塞 .


       न  㯠  ᫥ ᯮ짮, 筮,
  ।  㣮 ⨯.


        : DosGiveSeg()

       ࠧ,       ᯮᮡ  ࠧ     -   
ᮭ쭠 ࠧ塞  .    ⬥⨫ ,    ᯮᮡ
  ᯮ     ।   ;  ਬ     ᬮਬ
.  , ᮭ쭠  ࠧ塞  -   
⮤   ⢨      ᠬ.  ᪮   
   ᯥ樠쭮     楬   ᥣ     譥
,  蠭  ᠭ樮஢  .

       ,  ਬ    樨    室   -
뢠 來  ᫮.    ࣠樨  ᮭ쭮 ࠧ塞
       ᮢ    墠   ᥣ     
DosAllocSeg().      筮   墠  筮   ࠧ塞
ᥣ,      ᪫祭  ⮣,     ⠭    ࠬ
䫠  墠  ,   㪠뢠騩    ,     ᥣ   㤥
ࠧ塞.

     ,    㣮         ⮬
ᥣ,   ( 樯⮬  - ᮬ, ॡ騬 㯠 )  
楬 ᥣ   ந   ⢨.  -,
-ᮡ⢥    ᥣ         㧭     䨪
-樯.     ⨬    ஡,  ᫨ 樯 
஦  ᮬ    ⭮襭     ,    ᫨   
易   楬 ᥣ  ,    । ᢮
䨪  १  㣮  ࠧ塞  ᥣ  - .
  襬  ਬ    ⠥,    樯    ஦
ᮬ.

       ⮫쪮    ᥣ  㧭  䨪   
樯,  ᯮ    㬥 㭪樨 DosGiveSeg().  
㭪  頥   㪠⥫,           ᯮ짮
樯⮬  (      楬  )   㯠  ᥣ.  
⠥  ஡  ।  ⮣   㪠⥫  ⭮     
樯.  ⮣          ࠧ塞  ᥣ
, 㡪   ।.  ᪮   㦥    ࠧ
  १    ᥣ,    ᯮ㥬     ⨬
⮤.

     ⮬    襬  ਬ     ࠧ     ࠧ
ᥣ.          ᥣ⮬  䨪.  
ࠧ塞          ᥣ,     ᮧ      㭪樥
DosAllocShrSeg(),    ᯮ  ⮫쪮    ⮣,  ⮡ ।
㪠⥫  ᥣ   樯. ன ᥣ  
ᮭ   ࠧ塞   ᥣ⮬,      ᮧ       
DosAllocSeg().      ⮣  ᥣ   ।  
ᠬ.  .   11.2 뢠 ⢨   楬 
樯⮬, ⢫塞  ࠧ ᥣ.

Ŀ
-                                    -樯
                                                                     
  Ŀ 1)   .            7)  .  Ŀ   
        DosAllocShrSeg()  Ŀ  DosGetShrSeg()           
       >          <Ĵ         
                          ᥣ                             
   > 6) ⠭   >-Ŀ8)  ᥫ-          
        >         
      ᥫ  ᥣ-                  ᥣ              
                                                                
                                                                
                                                                
      2)  ᥣ Ŀ 9) ᯮ -         
      >ᥣ         稳         
       . DosAllocSeg     >         
                       >           뢠             
         ᥣ               
      3)                                         
        ᥣ                  ᥫ- 樯            
                                            
                                                               
                                                               
      4)  ୨                      
    >         
        DosExecPgm(),  ID                     
                                                              
                                                              
    >5)ᯮ 䨪 - Ŀ          
   <Ĵ       OS/2             
         祭 ᥫ             
          DosGiveSeg()                                   
                                                      
                                                                     


    . 11-2.     DosGiveSeg()



      ॠ쭮 ਬ   , ⭮,  㤥 ஫஢
 ,  ᪮쪮 樯⮢  ( ⮢  )   
      .     ⠭  ⮫쪮  
ࠧ塞  ᥣ    ࢮ砫쭮  ⢨  
  ⮢,            ᢮   ᮡ⢥
ᮭ  ᥣ    ࠧ  ᠬ    楬. 
襬 ਬ  ⮫쪮 .

       ⨭    -   ᥣ    (   ஦饣
 ) :

/* pgive.c */
/* ࠧ    DosGiveSeg()                  */
/* ᯮ짮 ᮢ⭮  ஦ ᮬ chgive.c  */
#define INCL_DOS
#include <os2.h>
#define LENGTH  40      /*    '          */
#define EXEC_FLAGS 1    /*   ᨭ஭,  ᫥          */
#define ARGS    0L      /*  㬥⮢  ப     */
#define ENVS    0L      /*  譨 ६ 㦥    */
                        /*     ࠧ  ᥣ⮢        */
#define DATA_SEG_SIZE sizeof(struct Data)
#define ID_SEG_SUZE   sizeof(unsigned)
#define DATA_FLAGS    1 /*  ࠧ  DosGiveSeg()  */
main()
{
char fbuf[LENGTH] ;              /*   䠩-'     */
struct _RESULTCODES childID ;    /*   ।  bsedos.h     */
unsigned rc ;                    /*                  */
unsigned short DataSel ;         /* ᥣ.  ᥣ  */
unsigned short IDSel ;           /* ᥣ.  ᥣ ID     */
struct Data                      /* ᮤন ࠧ. ᥣ   */
  {
  char DataOne ;
  int  DataTwo ;
  long DataThree ;
  }
struct Data far *DataPtr ;       /* -  ࠧ塞  */
unsigned far *IDptr ;            /* -  ᥣ-䨪 */

                            /*   ᥣ-䨪  */
if( rc = DosAllocShrSeg( ID_SEG_SIZE,
                               "\\SHAREMEM\\ID.DAT", &IDSel ) )
  {
  printf( "DosAllocShrSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
               /*  㪠⥫  ᥣ 䨪  */
IDptr = (unsigned far *)( (unsigned long)IDSel << 16 ) ) ;
                            /*    ࠧ塞  ᥣ  */
if( rc = DosAllocSeg( DATA_SEG_SIZE, &DataSel, DATA_FLAGS ) )
  {
  printf( "DosAllocSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
                       /*  㪠⥫  ᥣ  */
DataPtr = (struct Data far *)( (unsigned long)DataSel << 16 ) ) ;

DataPtr->DataOne = 'a' ;        /* ᨬ   ࠧ.ᥣ. */
DataPtr->DataTwo = 300 ;
DataPtr->DataThree = 999000 ;
                                  /* த ୨  */
if( rc = DosExecPgm( fbuf, LENGTH, EXEC_FLAGS, ARGS, ENVS,
                                       &childID, "chgive.exe" ) )
  {
  printf( "DosExecPgm error = %u\n", rc ) ;
  exit( 1 ) ;
  }
               /*  㪠⥫  ஦  */
if( rc = DosGiveSeg( DataSel, childID.codeTerminate,
                                                    &ChildSel ) )
  {
  printf( "DosGiveSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
*IDptr = ChildSel ;       /*   ᥣ-䨪 */

DosSleep( 1000L ) ;       /*  ६         */

                                        /* ᢮ ᥣ */
if( rc = DosFreeSeg( IDSel ) )
  {
  printf( "DosFreeSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
if( rc = DosFreeSeg( DataSel ) )
  {
  printf( "DosFreeSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
exit( 0 ) ;
}


     ணࠬ  ०   ᥣ  墠뢠  ᥣ-䨪   
 㭪樨 DosAllocShrSeg()    砥  㪠⥫   ᥣ.

      㦥             7,      ᯮ    㭪
DosAllocSeg().      ਬ    ⠭  ࠬ   䫠-
    1,  ⠭  ⠪  ࠧ    0,  㪠뢠騩  -
  "ࠧ              DosGiveSeg()".     
ᯮ㥬     㭪,   ⮡  墠  ᥣ      -
塞    ਢ묨  ६  ⠬  .      -
㥬  ୨  ,     㤥  樯⮬  ᥣ,    
  ⮬  砥  䨪  ,        
ᯮ짮     ࠬ    㭪樨  DosGiveSeg()     祭
㪠⥫  ᥣ   ஦ .

     DosGiveSeg -  㣮    ᥣ

     DosGiveSeg( OwnerSel, RecipientID, ARecipientSel ) ;
     unsigned short OwnerSel ;   /*  㪠⥫ 짮⥫ */
     unsigned RecipientID ;      /* ID  樯  */
     unsigned short far *ARecipientSel ;
                                 /*  - 樯  */


     㭪  DosGiveSeg()           ᥣ    ᥫ
  ᥣ    䨪    樯   ;    
       ࠬ.   ⨩  ࠬ  -     祩,
㤠 㤥 饭 ᥫ 樯.

       ⮫쪮         ᥫ,       頥
    ࠧ塞    ᥣ  䨪,      -
,  ⮡  樯      .   ᫥  ⮣    
襭  ࠡ   樯,   ᢮      ᥣ  -   
ᥣ 䨪,  ᥣ  -  蠥 ࠡ.

       樯  稭  ࠡ,    ०  ᥣ   砥
    ࠧ塞   ᥣ  䨪,   ⮡   
ᥫ  ᥣ  .      ⮣  ᥫ    ᮧ
㪠⥫     ᥣ        砥      .  ᫥
⮣  뢠  ᥣ  蠥 ࠡ.

/* chgive.c */
/*  ஦   ⭮襭  pgive.c                 */
/* 砥   ࠧ塞 ᥣ  ⠥       */
#define INCL_DOS
#include <os2.h>
main()
{
unsigned rc ;                    /*                  */
unsigned short DataSel ;         /* ᥣ.  ᥣ  */
unsigned short IDSel ;           /* ᥣ.  ᥣ ID     */
struct Data                      /* ᮤন ࠧ. ᥣ   */
  {
  char DataOne ;
  int  DataTwo ;
  long DataThree ;
  }
struct Data far *DataPtr ;       /* -  ࠧ塞  */
unsigned far *IDptr ;            /* -  ᥣ-䨪 */

                            /*   ᥣ-䨪  */
if( rc = DosGetShrSeg( ID_SEG_SIZE,
                                  "\\SHAREMEM\\ID.DAT", &IDSel ) )
  {
  printf( "DosGetShrSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
              /*  㪠⥫  ᥣ 䨪  */
IDptr = (unsigned far *)( (unsigned long)IDSel << 16 ) ) ;
                 /*  ᥣ   ᥣ  */
DataSel = *IDptr ;
                       /*  㪠⥫  ᥣ  */
DataPtr = (struct Data far *)( (unsigned long)DataSel << 16 ) ) ;
                  /*    ᥣ    */
printf( "DataOne = %c\n", DataPtr->DataOne ) ;
printf( "DataTwo = %d\n", DataPtr->DataTwo ) ;
printf( "DataThree = %ld\n", DataPtr->DataThree ) ;
                                        /* ᢮ ᥣ */
if( rc = DosFreeSeg( IDSel ) )
  {
  printf( "DosFreeSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
if( rc = DosFreeSeg( DataSel ) )
  {
  printf( "DosFreeSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
exit( 0 ) ;
}

       祭  㯠    ᥣ      ॡ   -
     ⥫   㭪権  (  ⨯  DosGetShrSeg()   ),
᪮  ஦     砥  ᥫ  ᥣ    -
    -   ᥣ,   १  ࠧ塞   ᥣ
䨪.


          

     㡪  ᯮ    ᥣ    楫  㢥   
堭  ॠ樨.       ⠪    ᯮ짮   
  ॠ樨,               ᠬ.    
ᬮਬ  ᭠砫    ன  砩,   ᪮    ,   
⥬  ᬮਬ,     㡪  㢥稢     堭
ॠ樨.

     㡪  ᯥ稢       ।⢮     ।
  㣮,         宦      䠩.   ⮪  ,
騩    ᨢ  ,   室        १
㡪    㣮.   㡪  ᯥ稢  न஢   ।
.

              DosMakePipe().

             䠩,      㡪  ⢫ 
  㪠⥫.     ⥭          㡪,  ⠪  
䠩   ᯮ                㭪樨    DosRead()    
DosWrite().

     㡪    ,     䠩,          뢠,
⮡      㪠⥫.     ᮧ  㡪     祭
     㪠⥫    ᯮ   㭪  DosMakePipe().    
㪠⥫  ᯮ    ⥭,    㣮       -
.

     DosMakePipe - ᮧ 㡪
Ŀ
    DosMakePipe( AReadHandle, AWriteHandle, PipeSize ) ;      
    unsigned short far *AReadHandle ;   /*  㪠⥫    
                                                    ⥭ */ 
    unsigned short far *AWriteHandle ;  /*  㪠⥫    
                                                     */ 
    unsigned PipeSize ;                 /* ࠧ 㡪   */ 


          ࠬ   DosMakePipe()   -       祥,
㤠    饭  㪠⥫  ⥭      㡪.  ࠬ
PipeSize  -    ࠧ  㡪    .  㡪    ᪮
㣮  ,         ॢ室  64    
  32      -  ..       65504  .   㡪 
      ,   祬  ⢮  ,  ஥   -
 ᫠.

     㡪  ।⠢     ᥡ  楢  ,   ࠡ뢠-
  ⥬    ⨢  .     11.3  뢠  ஥-
 ⮣ .



Ŀ
                          㪠⥫           
                                                   
      Ŀ      
                 <Ŀ        
           Ŀ          
                                              
                                              
                                        륳
                                             
                                             
                                        <  
                                              
                     
        >      >        
            
                                                  
                        㪠⥫ ⥭       


    . 11-3.  , ᯮ㥬  㡮


     ⥫    ⬥砥  ,   㤠  㤥  ᠭ   ᫥-
騩  ,     㪠⥫  ⥭  -  㤠     ᫥-
騩  .       ।          ⮬
  ࠢ.   ᫨  뢠騩         㡪
(  㪠⥫      㪠⥫  ⥭  ),   㭪  
ন,        ,     騩      ⠥
  ᪮쪮-    -        -   㡪.   -
,  ᫨  㡪    (  㪠⥫  ⥭  ⨫  㪠⥫
  ),  騩    ন,      ,   -
뢠騩          -  ଠ.    ⠪,
㡪  ᠬॣ㫨㥬  :        ᯮ    ⮬,
      ᫨誮          騥
.

         

         㦥  ,  㭪  DosMakePipe()  頥   ᮧ-
饬      㪠⥫  㡪  -      ⥭,    -
.      ᫮.   ।⠢,    ,   ᮧ-
訩  㡪,     ।  १      㣮  .
뢠騩      㪠⥫    ,       騩
 㪠⥫  ⥭  .

     ⮬,    ⮫쪮      ᮧ  㡪,    ࢮ-
।  祩      ⠭       ᮬ-樯-
⮬     ।     ᮮ⢥饣  㪠⥫.    ⥫
    ।      ப  㭪樨  DosExecPgm()  
      -   㣮    ⢨     -
ᠬ.     襬  ਬ    ।  㪠⥫     ࠧ塞
ᥣ .

        

          ਢ   ணࠬ,         ⥩  :
  ⠥  ப  ⥪    ,     㣠  ⠥  
  ࠭.     뫠      ணࠬ    㣮 -
१  㡪.     p_pipe.c  砥  ⥪      짮⥫.
  ⠪     ஦      ch_pipe.c,       ⮡ࠦ
⥪.


/* p_pipe.c */
/* 뫠 窨  
                           ஦  १ 㡪  */
#define INCL_DOS
#include <os2.h>
#define PIPESIZE 80     /*   ࠧ      㡪          */
#define SEGSIZE sizeof(unsigned)  /* ᥣ   1 ᫮  */
#define SEGNAME "\\SHAREMEM\\SEG1.DAT"  /*  ࠧ. -    */
#define LENGTH   30     /*    '          */
#define FLAGS     1     /*   ᨭ஭,  ᫥          */
#define ARGS     0L     /*  㬥⮢  ப     */
#define ENVS     0L     /*  譨 ६ 㦥    */
main()
{
char fbuf[LENGTH] ;              /*   䠩-'     */
struct _RESULTCODES childID ;    /*   ।  bsedos.h     */
unsigned short Selector ;        /* ᥫ ࠧ. ᥣ     */
unsigned far *fptr ;             /* -  ࠧ塞 ᥣ.  */
char String[PIPESIZE] ;          /*       ப      */
unsigned short ReadHandle ;      /* -  ⥭  㡪  */
unsigned short WriteHandle ;     /* -    㡪   */
unsigned Strlen ;                /* , ⠭  .  */
unsigned WriLen ;                /*     㡪    */
unsigned Written ;               /*  ᠭ  㡪      */
unsigned rc ;                    /*                  */

                                            /*  ᮧ 㡪  */
if( rc = DosMakePipe( &ReadHandle, &WriteHandle, PIPESIZE ) )
  {
  printf( "DosMakePipe error = %u\n", rc ) ;
  exit( 1 ) ;
  }
                            /*    ࠧ塞  ᥣ  */
if( rc = DosAllocShrSeg( SEGSIZE, SEGNAME, &Selector ) )
  {
  printf( "DosAllocShrSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
              /*  㪠⥫  ᥣ 䨪  */
fptr = (unsigned far *)( (unsigned long)Selector << 16 ) ) ;
                                  /* த ୨  */
if( rc = DosExecPgm( fbuf, LENGTH, FLAGS, ARGS, ENVS,
                                      &childID, "ch_pipe.exe" ) )
  {
  printf( "DosExecPgm error = %u\n", rc ) ;
  exit( 1 ) ;
  }
do
  {
  printf( " ப : " ) ;
  Strlen = WriLen = strlen( gets( String ) ) ;
  if( Strlen == 0 )             /* ᫨ ப 㫥 ,  */
    {
    strcpy( String, "." ) ;     /*   ᫠   ਧ    */
    WriLen = 1 ;
    }                           /*     ப    㡪 */
  if( rc = DosWrite( WriteHandle, String, WriLen, &Written ) )
    {
    printf( "DosWrite error = %u\n", rc ) ;
    exit( 1 ) ;
    }
  DosSleep( 500L ) ;       /*   ६  ஦ */
  }
while( Strlen > 0 ) ;      /*   㫥  ப */

DosFreeSeg( Selector ) ;                /* ᢮ ᥣ  */
DosClose( ReadHandle ) ;
DosClose( WriteHandle ) ;
exit( 0 ) ;
}


       㦥  㤨     ᮧ     ࠧ塞-
  ᥣ    ࢮ  ࠧ    .      
ᥣ  ⮨   ⮫쪮       楫  ᫮,   ᪮  
ᯮ  ⮫쪮    ।  㪠⥫  ⥭  㡪.   -
-த⥫  頥    㪠⥫    ᥣ,  㤠    -
    祭  ஦   ᮬ,      ⥬    ஦
       㭪樨  DosExecPgm().  -த⥫   
⠥  ப  ⥪        뫠    १ 㡪
    㪠⥫    㡪    㭪樨  DosWrite().   -
⥫      ணࠬ,    Enter    砫  -
.

      ⨭ ஦  :


/* ch_pipe.c */
/* ஦   ⭮襭  p_pipe.c                 */
/* ⠥ 窨  㡪  ⠥                       */
#define INCL_DOS
#define INCL_SUB
#include <os2.h>
#define STRLEN   80     /*   ࠧ      㡪          */
main()
{
char String[STRLEN] ;            /*       ப      */
unsigned BytesRead ;             /*   ⠭  㡪     */
unsigned short Selector ;        /* ᥫ ࠧ. ᥣ     */
unsigned far *fptr ;             /* -  ࠧ塞 ᥣ.  */
unsigned short ReadHandle ;      /* -  ⥭  㡪  */
unsigned rc ;                    /*                  */

                            /*    ࠧ塞  ᥣ  */
if( rc = DosGetShrSeg( "\\SHAREMEM\\SEG1.DAT", &Selector ) )
  {
  printf( "DosGetShrSeg error = %u\n", rc ) ;
  exit( 1 ) ;
  }
                              /*  㪠⥫  ᥣ  */
fptr = (unsigned far *)( (unsigned long)Selector << 16 ) ) ;
ReadHandle = *fptr ;          /*  㪠⥫  ⥭  */
while( TRUE )
  {
  if( rc = DosRead( ReadHandle, String, STRLEN, &BytesRead ) )
    {
    printf( "DosRead error = %u\n", rc ) ;
    exit( 1 ) ;
    }
  if( BytesRead == 1 && String[0] == '.' ) /*᫨ ਧ  */
    break ;                                /* 室             */
  VioWrtTTy( "稫    :     ", 17, 0 ) ;
  VioWrtTTy( String, BytesRead, 0 ) ;      /*  ப     */
  }

DosFreeSeg( Selector ) ;                 /* ᢮ ᥣ  */
exit( 0 ) ;
}


     ஦    砥   㪠⥫  ⥭     ࠧ-
  ᥣ          DosRead()   砥     
㡪.   ᫥  ⮣  窨         VioWrtTTy().
  ࠧ  ⮣,     㤥    ࠭  (   ᯮ짮  
James Russel Lowell, ⨪ 19 ⮫ ) :


     C>p_pipe
      ப : The foolish and
     稫        : The foolish and
      ப : the dead alone
     稫        : the dead alone
      ப : never change their opinions.
     稫        : never change their opinions.
      ப :
     C>

     (   ᢮  ⮫쪮 ࠪ   )

     짮⥫  ⠥    ப    ⢥      ਣ-
,     ஦    砥    १  㡪   -
.    ⮫쪮  짮⥫      ப,    --
⥫  ஦    ࠡ.

     _  ᮮ饭.:   뢮     ch_pipe.c  ࠧ  
ப  ⮫쪮  -   ⢨    ᮢ.   ஦騩
  ⠥   ᢮  ᪠    砥  ⠥   짮-
⥫      묨  ப  뢮   ஦    -
.  ᫨      ⮣      뫮,   뢮  ஦  
⠢    뢭  ⮪  ⥪,     ॢ  ப.  
     ਬ   ⢨      ᮢ  ࠥ   ஫
ࠧ⥫ ⥪⮢ 뢮  ஦ .

       筮    ।  ⥪   १   㡪,    ப
室  ࠧ  ॢ  ப,  ⠪  ,       -
  ⥪⮢   䠩.   筮   த     ࠧ⥫     
ᯮ짮  直  ࠧ,     ।  ,  ࠧ   
㯯  .

     _襭  ᮮ饭.:     ࠢ⥫       ⥫
  ⢮  ᮣ襭    ⮬,        -
।    㡪.     襬  ਬ  짮⥫   㪠뢠   
  ⥪,     Enter    砫  ப,     -த-
⥫  蠥,   ⨢  ப  㫥  .   ,   -
஦     ⠪        ⮬,     । -
襭.  ᫨  祣    ᫠,       ,   .. ஦-
  㤥 筮   ஬ DosRead().

       ⮬  砥,    㪠    ।,   -த-
⥫  뫠  ਧ    ।,  ப,      -
  ᨬ.    ஦      ,    -
.      ᯮ짮  ࠧ  ⮤      襭
।.      ᫮    䨪஢  ᫥   -
⮢    ।,   ,      㢨  ,   -
 ਧ  䠩 EOF,  㡪.

     ᫨    ᭮,     騩        -
饣    ⮬,    ।  襭,  饬    -
      ᥪ,  ᮤঠ  㭪  ⠩-.  ᫨  -
१  ।  ஬⮪  ६    饣     -
     㯨,   ⠩-   ⥪    騩    
,  騩 㦥 ⨢.

       㡪.:   ࠧ  㡪    p_pipe.c  ⠪  ,   
ࠧ        -       ࠭    ப
࠭.  짮⥫          ᨬ    ।
⨥    Enter.  ᥣ    ப  뢠    -
,    ⥬  뢠      ।  ⥬,    ᫥-
, ⮬ 㡪     ।.

         設⢥   ணࠬ,  ᯮ  㡪,   뢠-
  ⠪,         㡪  ,      . -
  㡪  ᯥ稢  ,    騩      ⠥ 
⮩  㡪,     騩          . -
⮬  ࠧ   㡪    祭  -  ࠡ  㤥   㡪.
,  ᫨誮  쪠  㡪  䥪⨢  -  ⮣,    
  騩,     騩    ᫨誮    ন  ᢮
ࠡ,    㡪      .   誮     㡪
ਢ      .       ஬    ⮣,
⮡,  ᯥ稢  ᮪  ᪮  ।  ,  㡪   
ࠫ   .

        

     㡪,     ࠢ,    ᯮ    ॠ樨,    ⠪
      ᬮਬ     堭,   ⮡    㢨,
          ਭ  㡪.   ॠ   筮
ᯮ,  ⮡    ணࠬ,  㢥७    ⮬,    
⠥            ࠭,   ⮣    ᠬ 
 ⠥    䠩  ᪥   㣨 ணࠬ.

     ॠ       ப.:   ।⠢,    ਬ,
ணࠬ,     ⠥   ⮪  ᨬ    ८ࠧ   
ᨬ    ॣ    ᨬ  孥  ॣ.    
 chredi.c    ⨭ :


/* chredi.c */
/*  ᯮ짮,  ஦   predi.c
                                    ᠬ⥫쭮     */
/* ⠥ ᨬ  stdin,
                  ॡࠧ   孨 ॣ
                                     뢠  stdout */
#define INCL_DOS
#include <os2.h>
#include <stdio.h>               /*   । EOF  */
#include <ctype.h>               /*   -  toupper() */
main()
{
int ch ;
printf( "஦  稭 ࠡ\n" ) ;
while( ( ch = getchar() ) != EOF )
  putchar( toupper( ch ) ) ;
printf( "஦  蠥 ࠡ\n" ) ;
exit( 0 ) ;
}

       த  ணࠬ   뢠  䨫ࠬ,  ᪮   ⮪
, 室騩 १ , ௥ - .

     ⥩訩  ᯮᮡ   ᯮ짮  chredi.c  -       
  -    .   ,       ⠥,
  ᨬ     ⮣,   ⠫           孥
ॣ,  ᫥        Enter   㤥   ⠭    
孥  ॣ.      Ctrl-z     襭  ணࠬ   -
      ஦  ਧ    䠩  EOF  - ᨬ-
  ⭠  0x1A.


     C>chredi
     ஦  稭 ࠡ
        
       
     ஦  蠥 ࠡ
     C>


     ஦    ⠥ ᮮ饭   砫    襭
᢮ ࠡ.

     ன  ᯮᮡ  ᯮ짮  chredi.c    ⮨       ॠ-
樨       ப.       ॠ樨    
।  chredi.c  䠩,     稬    ᮤন      孥
ॣ :


     C>chredi <source.txt
     ஦  稭 ࠡ
       
      SOURCE.TXT,
        .
     ஦  蠥 ࠡ
     C>


     筮      ॠᮢ  뢮     孥    -
     ணࠬ     䠩,         㡪  
  뫠    㣨  ணࠬ.   짮⥫  MS-DOS    
Unix        ⨬  ﬨ.    쥧  ਫ-
  ,   ⠪    ࠧ,   ஢   室騩    ⥪,
ଠ஢  ,   ᪠      ।  ᫮,    ⠢-
  ப  "    "      宦   ᨬ-
  "$"    ⢫    -     ८ࠧ-
.

     ᨬ     ⮣,   ⨢㥬         chredi.c    -
।⢥         ᯮ짮   ॠ樨,    ணࠬ
ᥣ  ⠥    stdin        stdout.   ॠ 
८।  ᮮ⢥騥  㪠⥫   ⠪,       㪠뢠-
  䠩  㣨 ணࠬ,    ࠭.

                  

    ।⠢ ⥯,    -  㣮 ,     -
⥫,     ᯮ짮   chredi.c      ॢ      ப
⥪    孨  ॣ.    chredi.c  筮  ⠥   stdin.
    ⠢      뢮,  ᮧ  㣮  ணࠬ-
 ?

     㡪  ।⠢         ࠧ  ⠪  堭.    ᫨
-த⥫  த  chredi.c        DosExecPgm(),    
 ᮧ 㡪  ᫠  १ 㡪 chredi.c.

     .  11.4  뢠,     chredi.c  ।     אַ
  ,     䠩      ॠ樨,      㣮
   㡪.





Ŀ
                                          Ŀ   
  ĿstdinĿ                   
      > chredi.c    >          
                          
                                             
    Ŀ                        Ŀ   
      䠩     stdinĿ                  
      ᪥   > chredi.c     >          
                                       
                               
    Ŀ                                         
     ஦騩                                         
                                                  
       chredi.c                                          
                                             
        Ŀ                            Ŀ   
            Ŀ  stdinĿ                  
         㡠> chredi.c     >          
                                 
                                             


  . 11-4. ७ࠢ   ᯮ짮 㡮.

       㪠⥫.:  ஦    chredi.c   ⠥
    䠩  stdin,   ,    ࠢ,  易   -
ன.    뫪    ஦    १    -
,  ஦騩      ८।  stdin  ⠪,   ⮡
  㪠뢠    㡪,         .   ⢫
 ᪮쪮 蠣.

     -,  㪠⥫   stdin   (  䨪஢  稭   0)
  ,  ⮡  ᮥ      .  ⥬  -
稭  stdin  ᢠ    㪠⥫,     㪠⥫   ⥭
㡪  㡫        㪠⥫.     ⥯   ஦-
    㤥      stdin  ,      ᠬ
 㯠  㡪,    .

     ணࠬ-த⥫  㪠뢠       ।     㡪,
뢠  㪠⥫    㡪      㭪樨   DosClose().
筮,   㪠⥫   ⥭  㡪    墠뢠    ஦
ᮬ,   ⮬   EOF      뫠  ஦   ,
  -த⥫    뢠   㪠⥫,    ᪮    
㪠⥫           ୨  ᮬ.   ⮡   맢
뫪  EOF,       ᤥ  㪠⥫    㡪   -
墠뢠    ஦  .     ⮣,  ।   -
஦  ୥   ,   -த⥫        ᮮ-
騩      ᫮  ﭨ  㪠⥫  䠩    㪠-
⥫  㡪, ⮡ ᤥ  墠뢠.

       襬  ਬ  ஦騩    뫠  १   㡪
       ப    म    ,    ஦ -
 ⠥   孥 ॣ.


/* predi.c */
/* 뫠 窨 ஦  १ 㡪  */
/* ᯮ ⠭ 䠩 㪠⥫            */
#define INCL_DOS
#include <os2.h>
#define PIPESIZE 10     /*   ࠧ      㡪          */
#define LENGTH   30     /*    '          */
#define FLAGS     1     /*   ᨭ஭,  ᫥          */
#define ARGS     0L     /*  㬥⮢  ப     */
#define ENVS     0L     /*  譨 ६ 㦥    */
#define STDIN     0     /*   ⠭ 㪠⥫        */
char *String[] =
  {
  "Experience does not ever err\n",
  "it is only your judgement\n",
  "that errs in promising itself\n",
  "results that are not caused\n",
  "by yor experience.\n"
  } ;
main()
{
char fbuf[LENGTH] ;              /*   䠩-'     */
struct _RESULTCODES childID ;    /*   ।  bsedos.h     */
unsigned short ReadHandle ;      /* -  ⥭  㡪  */
unsigned short WriteHandle ;     /* -    㡪   */
unsigned short NewStdin ;        /*  - ⠭.     */
unsigned HandState ;             /* ﭨ 㪠⥫ 䠩  */
unsigned Strlen ;                /* , ⠭  .  */
unsigned Written ;               /*  ᠭ  㡪      */
int j ;                          /*        窨        */
unsigned rc ;                    /*                  */


printf( "஦騩  稭 ࠡ\n" ) ;
                        /*  ᮧ 㡪,  㪠⥫  */
if( rc = DosMakePipe( &ReadHandle, &WriteHandle, PIPESIZE ) )
  {
  printf( "DosMakePipe error = %u\n", rc ) ;
  exit( 1 ) ;
  }
DosClose( STDIN ) ;              /*  ଠ   stdin  */
NewStdin = STDIN ;               /* ᤥ stdin ⠪ ,     */
                                 /*          ReadHandle     */
DosDupHandle( ReadHandle, &NewStdin ) ;
                   /* ᤥ  㪠⥫ 墠뢠 */
if( rc = DosQFHandState( WriteHandle, &HandState ) )
  {
  printf( "DosQFHandState error = %u\n", rc ) ;
  exit( 1 ) ;
  }
HandState &= 0x7F88 ;            /*  稬     */
HandState |= 0x0080 ;            /* ⠭  墠 */
if( rc = DosSetFHandState( WriteHandle, HandState ) )
  {
  printf( "DosSetFHandState error = %u\n", rc ) ;
  exit( 1 ) ;
  }
                                 /*   த ୨  */
if( rc = DosExecPgm( fbuf, LENGTH, FLAGS, ARGS, ENVS,
                                        &childID, "chredi.exe" ) )
  {
  printf( "DosExecPgm error = %u\n", rc ) ;
  exit( 1 ) ;
  }
for( j = 0 ; j < 5 ; j++ )
  {
  Strlen = strlen( String[j] ) ;
  if( rc = DosWrite( WriteHandle, String[j], Strlen, &Written ) )
    {
    printf( "DosWrite error = %u\n", rc ) ;
    exit( 1 ) ;
    }
  }

DosClose( ReadHandle ) ;         /*   㪠⥫         */
DosClose( WriteHandle ) ;        /*      ࠡ        */
printf( "-- -த⥫ 蠥 ࠡ\n" ) ;
exit( 0 ) ;
}


       룫廊 १㫫 ࠡ chredi.c    ᪥
predi.c :

     C>predi
     ஦騩  稭 ࠡ
     ஦  稭 ࠡ
     EXPERIENCE DOES NOT EVER ERR
     IT IS ONLY YOUR JUDGEMENT
     THAT ERRS IN PROMISING ITSELF
     RESULTS WHICH ARE NOT CAUSED
     BY -- -த⥫ 蠥 ࠡ
     YOUR EXPERIENCE.
     ஦  蠥 ࠡ
     C>


        ,  ஦騩        蠥  ࠭,  祬
஦     㡪.

     ᪮  ᯮ   ⠭  䠩   㪠⥫,   
  ।     ஦  .  ணࠬ஢   -
஦    ⠭  ࠧ      ,    
        ணࠬ       ᯮ짮     ।
      ,    䠩      㣮 ணࠬ-
  १  ॠ      ப,      㣮 ண-
ࠬ १ 㡪.

       ࠧ      ᮥ  㡪     뢮-
  chredi.c  (      㣮   ணࠬ   ).     ࠧ,
         ணࠬ-䨫         㭪樨
DosExecPgm(), ᫠     뢮.


           

     ।  -         ࠭    ᠬ  ᫮  
।  ⢨    ᠬ  OS/2.    ਭ樯,   -
।  -      ⮤   ࣠樨    㯠    㯯 ࠧ塞
ᥣ⮢  .     ࠧ塞  ᥣ  ⠢   
ᯨ᪠.  ᪮    ᥣ    ᮤঠ    64,  
।    ᮤঠ      4000  ⠪   ᥣ⮢,   -
⢮       ।  ࠭稢  ⮫쪮  ࠧ஬   -
⨢    (    ࠭⢮    㧪    ᪥,  ᫨
ᯮ 㠫쭠  ).

        ,   । ᠬ  ᥡ  ।
 ,   ⫨稥  㡪. ,  묨 㤥
ந,    ࠧ塞 ᥣ ,  
㯭   ᮢ. । ᯥ稢
堭  㯮冷稢    ࠢ  㯠  ࠧ塞
ᥣ⠬.

                  ,              

         ᮢ  ᮧ      ""  ।.  
ࠢ,    -  ⢥  ,       
  ।.     ⠫          ।,
            ,    짮⥫   -
  .   ⮬  ।    ᨭ஭  -     
প     ⥫쭮        ।    ⥭
  .     ।    ᪮    ᮮ饭,  ० 祬
  ।  筥    .       ࠧ  -
    ⥭  ᮮ饭    ।.        
  ਭ樯  FIFO  (᫥  襫  -    襫  ),LIFO (-
 襫  -      襫   ),         ᭮   ਮ⮢,
᢮  ᮮ饭     ࠢ⥫ﬨ.    11.5   -
  ⢨   ।      ᮢ,           
.

Ŀ
                                                                        
                           Ŀ                            
                                                                      
Ŀ              Ŀ                            
   騩  DosWriteQueue() ࠧ塞멳DosWriteQueue()              
            >            >Ŀ        
                      ᥣ                             
              ٳ                           
                                                                     
Ŀ              Ŀ              Ŀ
   騩  DosWriteQueue() ࠧ塞멳DosWriteQueue() ࠧ塞멳
            >            >Ĵ            
                      ᥣ                   ᥣ  
              ٳ              ٳ
                                                                    
Ŀ              Ŀ                          
   騩  DosWriteQueue() ࠧ塞멳DosWriteQueue()            
            >            >         
     DosWriteQueue()   ᥣ                             
Ŀ    ٳ                           
                                                                    
                           Ŀ                           
                            ࠧ塞멳DosWriteQueue()             
                       >            >   
                               ᥣ                              
                            ٳ                            
                                                       


   . 11-5.  , 騥   ।.

          ᠭ   ࠡ  ।  ᯮ     
⮢  騪.  ⮢  騪  ਭ    祫,   
      뫠  .    쬮     騪,
        㤠  ,        騪
        ,   ⮬    騪   ᪮-
    ᥬ.   ,    ⮢  騪    -
 쬠  ࠧ筮 浪, 筮 ⠪,    ।.

        ࠧ稥  ।ﬨ  㡪.  㡪
  ॢ室  ࠧ 64,          
  ⮬   浪,     饭  .   饭 ᫥
뢠   㡪,    ⮬,       뢠     䠩.
।    ⮫쪮 । 㪠⥫  ࠧ塞 ᥣ  ,
 ਢ    䥪⨢ ।   .

      㣮  ஭, 㡪     㤮   ।
讣  ⢠  ⪨  ᮮ饭,   ᪮       
 ⮫쪮  ᮮ饭, ᪮쪮     64, ⮣   
।  ⥬ ࠭祭  ᫮ ᮮ饭 -  4000.

                                 

       ᫥饬   ਬ      ᯮ㥬  ।     ।
  ப  ⥪        㣮.   筮   -
।    ࠢ⥫,      ਬ     ᮤ-
    ᮧ  ।      ⢮   -
ᮢ.

       ।,  readq.c,   ஦  ,     -
    ।.     ᮧ  ।,     ,   ஦-
       ࠢ  ᮮ饭,   ஥     ⮬
뢠.  ஦  ,    writeq.c,   砥      
।  頥   ᮮ饭.

       ஡,  ,   騩    ।,  (   
।  )  ᮧ        㭪樨  DosCreateQueue(),   -
뢠  ᥣ  ࠧ塞          DosAllocShrSeg()
  ஦  ୨         㭪樨    DosExecPgm().
     ⠥   ᮤন   ।        㭪樨
DosReadQueue    ⠥  .        ᢮  ᥣ-
        DosFreeSeg()      뢠   ।    
㭪樨 DosCloseQueue().  ⨭ ⮣ :


/* readq.c */
/* ᮧ ।  ⠥ ப  ஦     */
#define INCL_DOS
#define INCL_SUB
#include <os2.h>
#define OBJLEN    30    /*    '          */
#define FLAGS      1    /*   ᨭ஭,  ᫥          */
#define ARGS      0L    /*  㬥⮢  ப     */
#define ENVS      0L    /*  譨 ६ 㦥    */
#define PRIORITY   0    /*  ।  ਭ樯 FIFO           */
#define ECODE      0    /*        ।   */
#define WAIT (char)0    /*          ᥬ       */
#define SEG_SIZE  80    /* ࠧ ࠧ塞 ᥣ  */
main()
{
char fbuf[OBJLEN] ;              /*   䠩-'     */
struct _RESULTCODES childID ;    /*   ।  bsedos.h     */
unsigned short QHandle ;         /*    㪠⥫     ।    */
unsigned long PID_Data ;         /* PID  ID  饣    */
unsigned length = 0  ;           /*  ᫮  ।      */
unsigned long Addr ;             /*  ।    */
unsigned char EPriority ;        /* ਮ  ।  */
unsigned short Selector ;        /* c ࠧ塞 ᥣ. */
char data ;                      /*     ।        */

                                 /*      ᮧ   ।      */
DosCreatQueue( &QHandle, PRIORITY, "\\QUEUES\\Q1" ) ;

                            /*    ࠧ塞  ᥣ  */
DosAllocShrSeg( SEG_SIZE,"\\SHAREMEM\\S1", &Selector ) ;
                                   /* த ୨  */
DosExecPgm( fbuf, OBJLEN, FLAGS, ARGS, ENVS,
                                        &childID, "writeq.exe" ) ;
DosReadQueue( QHandle, &PID_Data, &length, &Addr,
                            ECODE, WAIT, &EPriority, SEMHANDLE ) ;
                                  /*       ⮡ࠧ     */
VioWrtTTy( "\n஦騩 稫 : ", 23, 0 ) ;
VioWrtTTy( (char far *)Addr, length, 0 ) ;

DosFreeSeg( Selector ) ;           /*      ᢮ ᥣ   */
DosCloseQueue( QHandle ) ;
exit( 0 ) ;
}


           ,     騩      ᯮ-
  ᥫ,   頥   DosAllocShrSeg().    㭪   -
  ⮫쪮    ⮣,  ⮡  ᯥ      ᥣ;
  ,   㤠     ,   Addr,   ।   㭪樨
DosReadQueue.

     騩  (  ஦  )    뢠     ࠧ塞
ᥣ⮬        DosGetShrSeg(),   뢠  ।     -
  DosOpenQueue(),       㪠⥫  砥       
ࠧ塞  ᥣ,   頥   뫠       ᥣ
         ।         㭪樨   DoaWriteQueue().
᫥  ⮣      ᢮   ᥣ      DosFreeSeg()  
뢠 ।   DosCloseQueue().   ⨭ :


/* writeq.c */
/* ୨   ⭮襭  readq.c                     */
/*  ᮮ饭  ।  ஦饣          */
#define INCL_DOS
#define INCL_SUB
#include <os2.h>
#define REQUEST    0                  /* ID  ।     */
#define EPRIORITY  0                  /*   ࠢ    */
#define STRLEN strlen(msg)            /*  ᮮ饭       */
char *msg = "ਢ, த⥫ !  ⢮ ." ;
main()
{
unsigned OwnerPID ;              /* PID ⥪饣       */
unsigned short QHandle ;         /*    㪠⥫   ।      */
unsigned short Selector ;        /* ᥣ.  ࠧ. ᥣ  */
char far *fptr ;                 /* -  ࠧ塞  */
int j ;                          /*  ஢ ப*/

                            /*    ࠧ塞  ᥣ  */
DosGetShrSeg( "\\SHAREMEM\\S1", &Selector ) ;
                                             /*  । */
DosOpenQueue( &OwnerPID, &QHandle, "\\QUEUES\\Q1" ) ;
                    /*  㪠⥫  ࠧ塞  */
fptr = (char far *)( (unsigned long)Selector << 16 ) ) ;
                                  /*    ᥣ */
for( j = 0 ; j < STRLEN ; j++ )
  *(fptr+j) = *(msg+j) ;
                                  /*       ⮡ࠧ     */
VioWrtTTy( "\n஦ 뫠 : ", 24, 0 ) ;
VioWrtTTy( fptr, STRLEN, 0 ) ;
                                  /*    । */
DosWriteQueue( QHandle, REQUEST, STRLEN, fptr, EPRIORITY ) ;

DosFreeSeg( Selector ) ;           /*      ᢮ ᥣ   */
DosCloseQueue( QHandle ) ;
exit( 0 ) ;
}


       ⨢   readq.c,  ஦      ᭠砫
⠥  ᮮ饭      ⮬,       ᮡࠥ  ᫠.   
-த⥫  ⠥,       稫  :     ,   
ᠬ ᮮ饭.


     C>readq
     ஦ 뫠 : ਢ, த⥫ !  ⢮ .
     ஦騩 稫 : ਢ, த⥫ !  ⢮ .
     C>


         ஡   ᬮਬ  㭪樨  API,   ਥ-
    ࠡ    ।ﬨ,  ᯮ짮      ਬ.
 ० ᬮਬ  ।, readq.c.

      DosCreateQueue()

     ।  ᮧ           㭪樨    DosCreateQueue().
,  믮訩     맮,   ⠭  楬   -
.  쪮    ।         㤠     
,  ,   ᫨       -     ࠧ
ᥪ樨,              ᠬ    ।, 
 ᥪ, ᮧ .

     DosCreateQueue - ᮧ ।
Ŀ
    DosCreateQueue( AQHandle, Priority, QName ) ;               
    unsigned short far *AQHandle ;  /*   - . */   
    unsigned Priority ;             /*   冷   㯠 */   
    char far *QName ;               /*        ।   */   

       ࠬ  -      祩,      ⥬ -
  㪠⥫  ।.      㪠⥫  㤥   ᯮ짮
  쭥襩  ࠡ    ।,     맮  ⨯  DosReadQueue()
  DosCloseQueue().  ⥫   ।  祭  㪠⥫   䠩-
,          ,  ⫨     㪠-
⥫ 䠩.

     ன  ࠬ   ।   冷,     ஬   ᮮ饭
      ।,     ᫮,       -
.    ਠ :


     稭                冷 祭
     ---------------------------------------------------------
        0                    FIFO
        1                    LIFO
        2                     ਮ ᮮ饭, ।-
                                    ࠢ⥫
      --------------------------------------------------------

     ᫨  ࠭  冷    ਮ⠬,     騩    -
    㪠  ਮ  ᢮  ᮮ饭      -
  㭪樨  DosWriteQueue().      襬   ਬ    㯮冷祭
ந室    ਭ樯  FIFO,        ᬮਬ,   ᯮ-
 LIFO  㯮冷祭  ਮ⠬.

     쨬  ࠬ஬   DosCreateQueue()        ।.
      砥      ࠧ塞  ,     -
,    ᮡ    ४ਨ;     ।     \QUEUES.
⮬,  ᫨  ⭠  ।  뢠  Q2.DAT,     
  㤥  \QUEUES\Q2.DAT.   (    몥    ॡ    -
⭠   ).

       

          ᮢ    墠  ࠧ塞  ᥣ   
  DosAllocShrSeg(),     㣮             
,  ᯮ   DosGetShrSeg().          ਬ   ᥣ
墠뢠  騩,      筮  ᥣ  墠뢠    騥
,  ..       ⢮  ।      -
 ࠢ쭮 । ࠧ ᥣ⮢.

              墠뢠   ᥣ,   ன    
,  ⮡    墠⨫  ,       ⮢  
  DosGetShrSeg()    訡  2  -  ERROR_FILE_NOT_FOUND  (  訡
     䠩   ).     襬  ਬ  ⠪  ஡  ⠥,
..  騩  墠뢠   ᥣ  ।  ᮧ   뢠-
   㭪樨 DosExecPgm().

      DosReadQueue()

     饭,  饭    ।  (  筥,     ᥣ  ࠧ-
塞  ,  ࠢ塞  ।  ),  뢠      
  㭪樨   DosReadQueue().       ,       
㭪  ॡ  㦠᭮  ⢮  ࠬ஢,         -
  ஫.

     DosReadQueue -  ᮮ饭  ।
Ŀ
    DosReadQueue( QHandle, AReg, Alen, AAddr, Code, Wait,       
                                                APrio, Sem ) ;  
    unsigned short QHandle ;   /*     㪠⥫    ।  */  
    unsigned long far *AReg ;  /* .  稭           
                                        饣    */  
    unsigned far *ALen ;       /* .   ᮮ饭  */  
    unsigned long far *AAddr ; /*   -  ᮮ. */  
    unsigned Code ;            /* ᫮      */  
    unsigned char Wait ;       /* 0 - , 1 -   */  
    unsigned char far *APrio ; /*       ਮ   */  
    void far * long Sem ;      /* 㪠⥫  ᥬ      */  


       ࠬ,  QHandle,    㪠⥫    ।,   -
祭    DosCreateQueue()     DosOpenQueue().      -
 ।,  ன ⢫ ⥭.

     ன  㬥,   AReg,       祩,   㤠    ⥬
ࠧ  稭,  ।⠢   ᮡ    ࠬ,   
          楫.   ࠢ     -
  䨪  ,   ᫠襣  ᮮ饭.     -
䨪  -    ଠ    ,   饣    
(  த      ⮢  騪,        ).
    -    ᯥ樠쭠  稭,   ।   -
ࠢ⥫         㭪樨   DosWriteQueue().      ࠬ
ᯥ稢     楫᫥     稭,          
ᯮ짮    ।   ᮡ  ଠ樨     ࠢ⥫
  ⥫,     ᮣ襭    ᠬ.  ⥬   
।    稭        㣮,     .
      ⮢  騪    ࠬ  ᮮ⢥   -
,  ய⠭   ᭠㦨    .        ᯮ짮,
ਬ,  㪠 ᫥ ᮮ饭  ᪮쪨.

     ⨩  ࠬ,  ALen,      祩, 㤠 㤥 饭
   祭 ᮮ饭.    襬 ਬ   ᯮ㥬
  稭    ࠬ     㭪樨  VioWrtTTy()     
ᮮ饭.

     ⢥  ࠬ,   AAddr,    ,  㤠  㤥   饭
㪠⥫    ࠧ塞  ᥣ.        ,  
⥫     㪠⥫ १ ᥫ   ࠧ塞
ᥣ ,  砥  DosReadQueue().

       ࠬ,    Code,   ᯮ       ८।
ଠ쭮  㯠    ⠥  .     ࠢ,    -
ࠬ  ࠢ  ,    㪠뢠    ,    ⠥ ᫥饥
ᮮ饭     楯窥.   ,   ᫨        DosPeekQueue()
ந  ஢ઠ  ᮮ饭    㤠         楯窨,
  ࠬ      ⠭  ࠢ  稭,   -
  DosPeekQueue(),   ⠪,     ⤥쭮  ᮮ饭     
⠭  ந쭮 浪.

     ⮩  ࠬ,     Wait,     ᯮ,   ⮡    ᮮ
⥬    ⮬,     ᫥  ।ਭ    砥,  ᫨  -
⮢    ⥭  ᮮ饭.   ᫨    㬥  ࠢ  0, 㭪-
  DosReadQueue()        室  ,   -
    .   ᫨    ࠬ  ࠢ  1,   ᥪ -
  ࠡ,    ᫨  ।  .    ⮬  砥 ᯮ-
  ⥬   ᥬ   (  .   쬮  ࠬ  )   ⮣,
⮡ 㪠 ᥪ樨  ,   । 㯨 ᮮ饭.

     ࠬ  APrio,   騩  ᥤ쬮      ᯨ᪥    ࠬ-
஢,  ᯮ      饭  ਮ  襤襣   ᮮ-
饭.    稭      ⮫쪮      ⮬   砥,  
ᯮ  㯮冷祭   ᮮ饭      ਮ⠬,      
㪠뢠    㭪樨  DosCreateQueue().     襬  ਬ    
㥬    稭,   ᪮  ᯮ㥬  ⮥   㯮-
冷祭 ⨯ FIFO.

     쬮    ᫥  ࠬ  DosReadQueue()  -  Sem  -   㪠-
⥫     ᥬ,   㪠뢠騩    ਡ⨥    ।  ᮮ-
.    ࠬ      ⮫쪮   ⮣,      ࠬ
Wait  ⠭     1,   㪠뢠    ,     㭪  
  稨  ⮩  ।.   ᪮    ਬ     ,
⥬      ࠬ.  ᫨  ࠬ  ⨢,   
ᯮ짮  ⥬, ⠪  ᥬ ⨢ .

           ,     DosReadQueue()  㤠   -
    ।,     ⥭  .    ⮫쪮   ⠭,
  室    ।        堭  ।    
  ⠭.  (  㭪  DosPeekQueue(),       ᬮਬ
, ᯮ  ⮪ 室 ).

                                 

     ᭮  ஫  㭪樨  DosReadQueue()  ⮨    ⮬,   ⮡
         ᮮ饭,   饭    ।.   
⮫쪮    ।  㧭    稭,      
             ࠧ塞    ᥣ,          
VioWrtTTy()    ᮮ饭,    ஥    ⠬    㦨.
  ।   ⥬  蠥  ࠤ塞  ᥣ     -
 ।   DosCloseQueue().

              DosCloseQueue()

         㭪樨  DosCloseQueue()    ।   㤠
।  ⥬. 쭥訥 ⪨ 㯠  , ᫥ ⮣,  
  , ਢ   ⥬ 訡.

     DosCloseQueue -  ।
Ŀ
    DosCloseQueue( QHandle ) ;                                
    unsigned short QHandle ;  /* 㪠⥫ . । */ 

       ,    騩  ᮡ⢥  ।, 뢠
DosCloseQueue(),  ४頥              ⮩
।,         ⠫  ᮢ  ⥪     
ଠ쭮 ; ᠬ  ᥡ ।  㭨⮦.

                        

      ⥯  ᬮਬ 㭪樨,   ᯮ짮   ,
饬  । :  襬 ਬ writeq.c.

     ० 祬   ᬮ    ।,    
    ᥣ  ࠧ塞  ,      㤥  饭
। ᮮ饭.   ᪮   襬 ਬ   ।
㦥  墠⨫       DosAllocShrSeg(), ࠢ⥫ 
⮫쪮         DosGetShrSeg().   㭪
頥 ᥫ ᥣ,  ⥬ ८ࠧ  㪠⥫,
    ࢮ  , 饭 ࠧ塞 .

     ⥫  砥      ᮮ饭    ।  
㪠⥫,  砥    㭪樨  DosReadQueue(),     ࠢ⥫
頥   㤠, ᯮ  㪠⥫   ࠧ塞 ᥣ. 
㪠⥫ ᫥ । 㭪樨 DosWriteQueue(), ⠪   ,
 ᮮ饭,   ।   ⥫.

      

     ,   騩 㯠   ।,  砥    
㭪樨 DosOpenQueue().

     DosOpenQueue -  ।
Ŀ
    DosOpenQueue( AOwnerPID, AQHandle, QName ) ;               
    unsigned far *AOwnerPID ;  /*   ID     */ 
    unsigned short AQHandle ;  /*   㪠⥫ . */ 
    char far *QName ;          /* ASCIIZ       ।   */ 

     ᫥  믮  ⮩   㭪樨  ⥬  頥    -
䨪      ।    AOwnerPID.       -
      襬   ਬ.      ᯮ㥬   㪠⥫   ।,
頥    AQHandle,    ᥣ  ᫥饣  㯠    -
।.

       祭  㯠         ⨬   ᪠    ଠ樨,
㭪樨  ᫥  ।    ।  (  QName  ),  -
    ASCIIZ-ப.     㦥  ⬥砫   ࠭      㭪樨
DosCreateQueue(),           稭      -
४ਨ \QUEUES.

       ⮫쪮  ।       -ࠢ⥫   ⨫
।  ᮮ饭      ᥣ  ࠧ塞  ,    ᥣ
頥  । ।⢮ 㭪樨 DosWriteQueue().

     DosWriteQueue -  ᮮ饭  ।
Ŀ
    DosWriteQueue(QHandle, Request, Length, Addr, Priority) ; 
    unsigned short QHandle ;  /*    㪠⥫    ।    */
    unsigned Request ;        /* ᮡ   ⥫  */
    unsigned Length ;         /*      ᮮ饭        */
    unsigned char far *Addr ; /*        ᮮ饭      */
    unsigned Priority ;       /*    ਮ  ᮮ饭    */

     ,  뢠騩  DosWriteQueue(),   ।       -
ࠬ஢  ;  㭪  祣    頥.    ࠬ  - 
㪠⥫  ।,   祭    DosOpenQueue().  ன  -   
ᮡ  ᮪    ࠧ஬       楫,   Request,   
    ।  饬      祭    १ 㭪-
  DosReadQueue().     㬥  㭪樮  ;        
㥬    襬  ਬ.  ⨩  ࠬ,  Length,    
ᮮ饭,    ⢥  -    ,  Addr.  ᫥   -
  Priority,    ᯮ  ⮫쪮    ⮬  砥,  
।  ᮧ    㯮冷稢     ਮ⠬.       
⠪,     ᮮ饭,    뫠       DosWriteQueue(),
    ᢮  ᮡ⢥  ਮ        0  15,
祬  訥  稭   ᮮ⢥  訬  ਮ⠬.    
  ᯮ㥬  ਮ      ਬ,   ⮬    -
 .

      ᮮ饭 ᥭ  ।, ࠢ⥫   ᢮
ࠧ塞 ᥣ  ᢮ ।.    㦥 ⬥砫  ࠭,
᫨ ,  騩 ।, ஥ , ࢥ ⮫쪮  
    ।.    ।    ⠫  
 ,   ०.

                                

     筮      ।  뢠     祬      -
.  騩    ਬ  뢠  ࠡ      -
ᮢ       饣.  -த⥫,  rqmult.c,   ᮧ
ࠧ  ࠧ塞  ᥣ      ஦     ୨
.        -           ᮮ饭  
     ஦      ᮢ.   ⮡  ,    ᪮쪮
ᮮ饭  ,    騩         㭪-
樥, DosQueryQueue().


/* rqmult.c */
/* ᮧ ।  ⠥   ஦ ᮢ    */
#define INCL_DOS
#define INCL_SUB
#include <os2.h>
#define OBJLEN    30    /*    '          */
#define PRIORITY   0    /*  ।  ਭ樯 FIFO           */
#define ECODE      0    /*        ।   */
#define NOWAIT (char)0  /*          ᥬ       */
#define SEMHANDLE (long)0   /* ,  NOWAIT = 0  */
#define SEG_SIZE  80    /* ࠧ ࠧ塞 ᥣ  */
#define FLAGS      1    /*   ᨭ஭,  ᫥          */
#define ARGS      0L    /*  㬥⮢  ப     */
#define ENVS      0L    /*  譨 ६ 㦥    */
main()
{
unsigned short QHandle ;         /*    㪠⥫     ।    */
unsigned long PID_Data ;         /* PID  ID  饣    */
unsigned length = 0  ;           /*  ᫮  ।      */
unsigned long Addr ;             /*  ।    */
unsigned char EPriority ;        /* ਮ  ।  */
unsigned short Select1 ;         /* c ࠧ塞 ᥣ.1*/
unsigned short Select2 ;         /* c ࠧ塞 ᥣ.2*/
unsigned short Select3 ;         /* c ࠧ塞 ᥣ.3*/
char fbuf[OBJLEN] ;              /*   䠩-'     */
struct _RESULTCODES childID ;    /*   ।  bsedos.h     */
unsigned NumMsgs ;               /* ᫮ ᮮ饭  ।   */
unsigned AsciiNum ;              /* 稭 ASCII     */
int count ;                      /*     ६   横      */

                                 /*      ᮧ   ।      */
DosCreatQueue( &QHandle, PRIORITY, "\\QUEUES\\Q1" ) ;

                           /*    ࠧ塞  ᥣ  */
DosAllocShrSeg( SEG_SIZE,"\\SHAREMEM\\S1", &Select1 ) ;
DosAllocShrSeg( SEG_SIZE,"\\SHAREMEM\\S2", &Select2 ) ;
DosAllocShrSeg( SEG_SIZE,"\\SHAREMEM\\S3", &Select3 ) ;
                                  /* த ୨  */
DosExecPgm( fbuf, OBJLEN, FLAGS, ARGS, ENVS,
                                       &childID, "wqmult1.exe" ) ;
DosExecPgm( fbuf, OBJLEN, FLAGS, ARGS, ENVS,
                                       &childID, "wqmult2.exe" ) ;
DosExecPgm( fbuf, OBJLEN, FLAGS, ARGS, ENVS,
                                       &childID, "wqmult3.exe" ) ;
DosSleep( 4000L ) ;   /*      ஦   */
                      /* , ᪮쪮 ᮮ饭 祭 */
DosQueryQueue( QHandle, &NumMsgs ) ;   /*       ᫮   */
AsciiNum = NumMsgs + 48 ;              /* ८ࠧ  ASCII */
VioWrtTTy( "祭 ᮮ饭 : ", 21, 0 ) ;
VioWrtTTy( (char far *)&AsciiNum, 1, 0 ) ;

for( count = 0 ; count < NumMsgs ; count ++ )
  {                    /*     ஦    */
  DosReadQueue( QHandle, &PID_Data, &length, &Addr,
                          ECODE, NOWAIT, &EPriority, SEMHANDLE ) ;
                                  /*       ⮡ࠧ     */
  VioWrtTTy( "\n稫 : ", 10, 0 ) ;
  VioWrtTTy( (char far *)Addr, length, 0 ) ;
  }

DosFreeSeg( Select1 ) ;            /*      ᢮ ᥣ  */
DosFreeSeg( Select2 ) ;
DosFreeSeg( Select3 ) ;
DosCloseQueue( QHandle ) ;
exit( 0 ) ;
}


       ஦  ( ࠢ⥫ )  .
 ⨭ ࢮ   :


/* wqmult1.c */
/* ୨   ⭮襭  rqmult.c                    */
/*  ᮮ饭  ।  ஦饣          */
#define INCL_DOS
#include <os2.h>
#define REQUEST    0                  /* ID  ।     */
#define EPRIORITY  0                  /*   ࠢ    */
#define STRLEN strlen(msg)            /*  ᮮ饭       */
char *msg = "஦   " ;
main()
{
unsigned OwnerPID ;              /* PID ⥪饣       */
unsigned short QHandle ;         /*    㪠⥫   ।      */
unsigned short Selector ;        /* ᥣ.  ࠧ. ᥣ  */
char far *fptr ;                 /* -  ࠧ塞  */
int j ;                          /*  ஢ ப*/

DosSleep( 1000L ) ;         /*   ஦饬 -  */
                            /*    ࠧ塞  ᥣ  */
DosGetShrSeg( "\\SHAREMEM\\S1", &Selector ) ;
                                             /*  । */
DosOpenQueue( &OwnerPID, &QHandle, "\\QUEUES\\Q1" ) ;
                    /*  㪠⥫  ࠧ塞  */
fptr = (char far *)( (unsigned long)Selector << 16 ) ) ;
                                  /*    ᥣ */
for( j = 0 ; j < STRLEN ; j++ )
  *(fptr+j) = *(msg+j) ;
                                  /*    । */
printf( "஦  #1   ।\n" ) ;
DosWriteQueue( QHandle, REQUEST, STRLEN, fptr, EPRIORITY ) ;

DosFreeSeg( Selector ) ;           /*      ᢮ ᥣ   */
DosCloseQueue( QHandle ) ;
exit( 0 ) ;
}

      騬 ᠬ  ⠪   ⫨,  -
 . ⮡ ८ࠧ wqmult1.c  wqmult2.c  
wqmult3.c :

     1)  ᮮ⢥騥   ᮮ饭,  -
 饬  :

     char *msg = "஦   " ;

     2)   প   2000L  wqmult2.c   3000L 
wqmult3.c :

     DosSleep( 2000L ) ;

     3)   ᥣ :

     DosGetShrSeg( "\\SHAREMEM\\S2", &Selector ) ;

     4)  ᮮ饭,  ஥ ⠥ ᠬ ஦
 :

     printf( "஦  #2   ।\n" ) ;


     ,      writeq.c,            ᮢ
頥     ப   ⥪      ᢮  ᮡ⢥   ࠧ塞
ᥣ .

     ⮡  ⠭   冷,       ஬       뫠
ᮮ饭,        ᮢ    ࠧ筮   -
⢮  ६  ।  ࠢ    ᮮ饭.       wqmult1.c
  1  ᥪ㭤,  wqmult2.c    2  ᥪ㭤,  wqmult3.c  - 3 ᥪ-
.  騩      4  ᥪ㭤,   ०  祬     稭
⥭  -     ᮮ饭.     (   筮      ᨭ஭樨
⢨  ࠢ⥫     ⥫  ᯮ  ⥬    ᥬ-
 ;  㤨      ).

     ᪮    ।ᬮ५   㯮冷祭    ਭ樯   FIFO,
᫥  ,     騩            ⠥
ᮮ饭     ⮬    浪,         ࠢ.   ࠧ
    ந諮,          뢮  ணࠬ, 祭-
 ᫥ ᪠ 饣  :


     ஦  #1   ।
     ஦  #2   ।
     ஦  #3   ।
     祭 ᮮ饭 : 3
     稫 : ஦   
     稫 : ஦   
     稫 : ஦   


     砫,     ࢠ       ᥪ㭤,   ஦   -
  (  ࠢ⥫  )  ᮮ    ⮬,       ।.
⥬  稭   ࠡ   ⥫    ஢  ।    -
  㭪樨  DosQueryQueue().      㭪   頥    ᫮
⮢     ।,         ᫮  ᯮ    ࠬ
横    ।  ᫠  뢠     ।.   ⥭   
  ⢫  ⠪,       ࠭.  ᪮   ᯮ짮-
  㯮冷祭  FIFO,  ᮮ饭      ⮬    浪,
 ஬  뫨 ࠢ.

       

     㭪 DosQueryQueue()  ᯥ稢   ᯮᮡ ஢,
᪮쪮 ᮮ饭  ⥭  ।.

     DosQueryQueue -  ࠧ ।

     DosQueryQueue( QHandle, ANumber ) ;
     unsigned short QHandle ;       /* 㪠⥫ ।     */
     unsigned far *ANumber ;        /* .  ᫮ -⮢ */

       㭪      ࠬ  :  㪠⥫ ।  
祩, 㤠 ⥬  ᫮ ⮢  ।.

                          

                 ਬ    ।ﬨ   ᯮ짮
㯮冷祭  FIFO.        ᯥਬ஢     
ࠧ묨  ਮ⠬.    ਬ,   ⮡      ।騩
ਬ    ਮ  LIFO,  ,        ᤥ,  -
     ࠬ     rqmult.c  :   稭  㬥  Priority
㭪樨  DosCreateQueue().         #define,    
।  稭,  :

     #define PRIORITY      1   /* ।  ਭ樯  LIFO */

     , ᫥ ᪠ ணࠬ,  㢨  ࠭ ᫥-
饥 :


     ஦  #1   ।
     ஦  #2   ।
     ஦  #3   ।
     祭 ᮮ饭 : 3
     稫 : ஦   
     稫 : ஦   
     稫 : ஦   


     -த⥫  ⠥  ᮮ饭     浪,  ⭮   -
,      뫨  饭    ।.     11.6 뢠 ࠧ-
 ਮ.

     ⨩  ਠ  -  ࣠  ।    롮મ    ਮ-
⠬  ᮮ饭,   ⮡  ᢮    ᮮ饭  ᢮   -
稭  ਮ.     ᤥ      ਬ  rqmult.c,  
   .

     -, 㬥 Priority 㭪樨 DosCreateQueue() -
   2 :

     #define PRIORITY   2     /* ।  ਮ⠬     */

     ⥬,         饬   ,   㬥   EPriority
㭪樨  DosWriteQueue()   ᫥   ਤ  祭  ⮣   ਮ-
,    ਤ ᢮ ᮮ饭.

     ਬ,   稭  wqmult1.c :

     #define EPRIORITY  5    /* 訩 ਮ    */

      wqmult2.c :

     #define EPRIORITY  15   /* 訩  ਮ    */

       䠩 wqmult3.c :

     #define EPRIORITY  10   /* । ਮ    */



Ŀ
                         
  (ࠢ⥫)    Ŀ                      
    Ŀ    1    Ŀ    1                  
        >    >Ŀ              
                                   
    Ŀ    2    Ŀ    2   Ŀ        
        >    >ĳ            
                             
    Ŀ    3    Ŀ    3                 
        >    >              
                                    
                                         
        FIFO - ਮ                          
                                 뢠 
                   Ŀ    冷  
    Ŀ    1    Ŀ   3         ᮡ⨩   
        >    >Ŀ              
                                   
    Ŀ    2    Ŀ   2    Ŀ        
        >    >ĳ            
                             
    Ŀ    3    Ŀ   1                  
        >    >              
                                    
                                         
       LIFO - ਮ                           
                                                  
                   Ŀ                      
    Ŀ   1     Ŀ    3                  
        >    >Ŀ              
     ਮ.=5                      
    Ŀ   2     Ŀ    1   Ŀ        
        >    >ĳ            
    ٯਮ.=15                
    Ŀ   3     Ŀ    2                 
        >    >              
    ٯਮ.=10                       
                                         
      㠫 ਮ                   
                                                  


    . 11-6. ਮ ।.


          ⥯   ⨬   ணࠬ,      㢨,     
rqmult.c ⠥ ᮮ饭  浪 ⠭ ਮ⮢ :


     ஦  #1   ।
     ஦  #2   ।
     ஦  #3   ।
     祭 ᮮ饭 : 3
     稫 : ஦   
     稫 : ஦   
     稫 : ஦   


         ᯮᮡ  ࠡ    ਮ⠬    墠  
設⢥  権.  ᫨   ⮣  筮,     ᯮ짮-
 ᫥饥   ⥭ ⮢ ।.

                      

       뢠   室    ஢       ।,
०,  祬  ⢨⥫쭮  뢠       ⮬   㤠   
।.     ⢨      ⢨       㭪樨
DosPeekQueue().

     DosPeekQueue -    ।,  㤠 
Ŀ
    DosPeekQueue( QHand, AReq, ALen, AAddr, ACode, Wait,       
                                               APrio, Sem ) ;  
    unsigned short QHand ;     /*     㪠⥫    ।  */ 
    unsigned long far *AReq ;  /* .  稭          
                                        饣    */ 
    unsigned far *ALen ;       /* .   ᮮ饭  */ 
    unsigned long far *AAddr ; /*   -  ᮮ. */ 
    unsigned far *ACode ;      /* . .  */ 
    unsigned Wait ;            /* 0 - , 1 -   */ 
    unsigned char far *APrio ; /*       ਮ   */ 
    void far *Sem ;            /* 㪠⥫  ᥬ      */ 

     設⢮  ࠬ஢  ⠪  ,          DosReadQueue().
᪫祭      ACode,   ஬   ᮮ⢥⢮   ࠬ
Code  㭪樨  DosReadQueue().     㭪樨  DosPeekQueue()     -
,  ⠪      㭪        祭    ਭ
.

     ᫨  ணࠬ  ⠭  ACode    0,   㭪  㤥  
    ।.   ,    頥    ⮫쪮  
ᬮ७  ६.   ᫨  ணࠬ      ᠬ    
        ᠬ    ।  (    ᬠਢ
  ),    稭      ᯮ짮    室 -
 Code 㭪樨 DosReadQueue().

     ᫨  ணࠬ  ᬮ        ।,    ⥬
⠢      稭    ACode,    ᭮  믮 㭪-
  DosPeekQueue(),㤥   ᬮ७  ᫥騩      ।.
    ணࠬ  ᬠਢ  ।        -
⮬.

         

                  ᬮ७  ਬ,    ⠬
।  﫨    ᥣ   .       ⥩訩
室,        客      ⭮,   -
    ᯮ짮     ࠧ塞  .    
,  騩    ।,           ᥣ-
,  ⮬       ஭   ⥫⢮       -
⢨    ࠢ⥫    ⥫  ᮮ饭     ।.
            ᥣ  (     
।祩 ப ).

               㤮  室  -  ᯮ짮-
    ⢥  ⮢  ।  ᥣ  ᮭ쭮   ࠧ-
塞 .

     ᮭ  ࠧ塞       ࠧ      ᯮ짮-
    ।,     ࠢ    ⤥  ࠧ塞  ᥣ-
⮬.     ॡ      ᮡ   堭      ।
䨪       ।  ,  饬   
।,  ..       䨪    頥   ⮬᪨
㭪樥  DosOpenQueue()    ⨨  ।.  ஬  ⮣,   -
  ।       墠뢠  ᥣ      㭪樨
DosAllocShrSeg().

       蠣,      ᫥  ।ਭ  ,   饬
  ।  (    襬  ਬ    ஦  楬 ।
 ),  饭 ᮮ饭  । :

     1)  墠  ᥣ        DosAllocSeg()       䫠
墠      ⠭  ⮬  "ࠧ塞      -
 DosGiveSeg()".

     2)    ।   㭪樥  DosOpenQueue(),     -
頥 䨪   ।.

     3)  ।     䨪  㭪樨  DosGiveSeg(),   -
 ᥫ ᥣ   ।.

     4)        ᥣ      㪠⥫,   -
祭  ᥫ   ।.

     5)      ᥣ    ।,  -⠪    
㪠⥫, 祭  ᥫ   ।.

     ࠢ⥫쭮       ᤥ    ।   (-
஦騩  ) :

     1)  ।   DosCreateQueue().

     2)   ࠧ塞 ᥣ   㭪樨
DosReadQueue().

     3)   ⮣     ᥣ.

      ⨭ ஦饣  :


/* rgive.c */
/* ᮧ ।  ⠥   ஦ ᮢ    */
/*     ।  ᥣ ᮭ쭮
                                           ࠧ塞   */
#define INCL_DOS
#define INCL_SUB
#include <os2.h>
#define OBJLEN    30    /*    '          */
#define PRIORITY   0    /*  ।  ਭ樯 FIFO           */
#define ECODE      0    /*        ।   */
#define NOWAIT (char)0  /*          ᥬ       */
#define SEMHANDLE (long)0   /* ,  NOWAIT = 0  */
#define FLAGS      1    /*   ᨭ஭,  ᫥          */
#define ARGS      0L    /*  㬥⮢  ப     */
#define ENVS      0L    /*  譨 ६ 㦥    */
main()
{
unsigned short QHandle ;         /*    㪠⥫     ।    */
unsigned short Selector ;        /* c ࠧ塞 ᥣ. */
unsigned long PID_Data ;         /* PID  ID  饣    */
unsigned length = 0  ;           /*  ᫮  ।      */
unsigned long Addr ;             /*  ।    */
unsigned char EPriority ;        /* ਮ  ।  */
char fbuf[OBJLEN] ;              /*   䠩-'     */
struct _RESULTCODES childID ;    /*   ।  bsedos.h     */
unsigned NumMsgs ;               /* ᫮ ᮮ饭  ।   */
unsigned AsciiNum ;              /* 稭 ASCII     */
int count ;                      /*     ६   横      */

                                 /*      ᮧ   ।      */
DosCreatQueue( &QHandle, PRIORITY, "\\QUEUES\\Q1" ) ;

                                  /* த ୨  */
DosExecPgm( fbuf, OBJLEN, FLAGS, ARGS, ENVS,
                                        &childID, "wgive1.exe" ) ;
DosExecPgm( fbuf, OBJLEN, FLAGS, ARGS, ENVS,
                                        &childID, "wgive2.exe" ) ;
DosExecPgm( fbuf, OBJLEN, FLAGS, ARGS, ENVS,
                                        &childID, "wgive3.exe" ) ;
DosSleep( 4000L ) ;   /*      ஦   */
                      /* , ᪮쪮 ᮮ饭 祭 */
DosQueryQueue( QHandle, &NumMsgs ) ;   /*       ᫮   */
AsciiNum = NumMsgs + '0' ;             /* ८ࠧ  ASCII */
VioWrtTTy( "祭 ᮮ饭 : ", 21, 0 ) ;
VioWrtTTy( (char far *)&AsciiNum, 1, 0 ) ;

for( count = 0 ; count < NumMsgs ; count ++ )
  {                    /*     ஦    */
  DosReadQueue( QHandle, &PID_Data, &length, &Addr,
                          ECODE, NOWAIT, &EPriority, SEMHANDLE ) ;
                                  /*       ⮡ࠧ     */
  VioWrtTTy( "\n஦騩  稫 : ", 31, 0 ) ;
  VioWrtTTy( (char far *)Addr, length, 0 ) ;
  Selector = Addr >> 16 ;         /*    ᮧ    ᥫ     */
  DosFreeSeg( Selector ) ;        /* ᢮ ࠧ. ᥣ   */
  }
DosCloseQueue( QHandle ) ;        /*   ᢮    ।    */
exit( 0 ) ;
}

         ਢ  ⨭  ࢮ    ஦   ()
ᮢ.  ,        wqmult.c,    ஦ 
,    ᪫祭  ᮮ饭,  뫠  ।,
६ থ  ஢ printf,    ᮮ   ⮬,
  .


/* wgive1.c */
/* ୨   ⭮襭  rgive.c                     */
/*  ᮮ饭  ।  ஦饣          */
/* ᯮ ᮭ ࠧ塞   DosGiveSeg()   */
#define INCL_DOS
#include <os2.h>
#define REQUEST    0                  /* ID  ।     */
#define EPRIORITY  0                  /*   ࠢ    */
#define ALLOCFLAG  1                  /* ࠧ  
                                                  DosGiveSeg() */
#define STRLEN strlen(msg)            /*  ᮮ饭       */
char *msg = "஦   " ;
main()
{
unsigned OwnerPID ;              /* PID ⥪饣       */
unsigned short QHandle ;         /*    㪠⥫   ।      */
unsigned short Selector ;        /* ᥣ.  ࠧ. ᥣ  */
unsigned short OwnerSel ;        /* c ᥣ  */
char far *fptr ;                 /* -  ࠧ塞  */
int j ;                          /*  ஢ ப*/

DosSleep( 1000L ) ;         /*   ஦饬 -  */
                            /*    ࠧ塞  ᥣ  */
DosAllocSeg( STRLEN, &Selector, ALLOCFLAG ) ;
                                             /*  । */
DosOpenQueue( &OwnerPID, &QHandle, "\\QUEUES\\Q1" ) ;
                    /*   ।  
                                          ࠧ塞 ᥣ */
DosGiveSeg( Selector, OwnerPID, &OwnerSel ) ;
             /* ᮧ 㪠⥫  
                                ᥫ   । */
fptr = (char far *)( (unsigned long)OwnerSel << 16 ) ) ;
                                  /*    ᥣ */
for( j = 0 ; j < STRLEN ; j++ )
  *(fptr+j) = *(msg+j) ;
                                  /*    । */
printf( "஦  #1   ।\n" ) ;
DosWriteQueue( QHandle, REQUEST, STRLEN, fptr, EPRIORITY ) ;

DosFreeSeg( Selector ) ;           /*      ᢮ ᥣ   */
DosCloseQueue( QHandle ) ;
exit( 0 ) ;
}

     뢮 ⮩  ணࠬ 祭  宦   ,      㦥 砫
࠭ :


     ஦  #1   ।
     ஦  #2   ।
     ஦  #3   ।
     祭 ᮮ饭 : 3
     稫 : ஦   
     稫 : ஦   
     稫 : ஦   

                                      

     㣮  室    ᮧ  ࠧ塞        ।
砥     ⮬,  ⮡  ᯮ짮      ᥣ  
᪮쪨 ࠧ  ᮢ,      
  ᥣ   DosSubAlloc()   ।      
饬        㭪樨 DosWriteQueue().

     ⢮  ,  ࠭    ।  ६  ⠪
室  ࠭祭,  ᪮    ᥣ     ॢ室
64.  ஬ ⮣, । 㭪樮  ᥣ  ⮬
砥,    墠뢠        ⮣  ࠧ - 
᪫砥  ࠣ  .   ᫨  ᮮ饭    襩   ।
⪨        ,    室  ᫥ ਧ
訬,  ..  뤥    ந室  ॥, 祬 뤥
楫 ᥣ.

                            

      ਢ  ਬ    ᪮쪨   ᯮ짮
६ প,  ᮧ 㭪樥  DosSleep(),   ⨦
न樨  ᠬ.   ࠫ   室, ..  
   ਬ    ᫮  ⨥ 㦤 ।.
  ᯮ짮  ६  থ  ਥ  쥧
ਬ.   প  ⠭  '⮬    ,  
ணࠬ    㣨  ᥪ    ६  ⢨  
ᠬ.   砥,  䥪⨢.

       設⢥  砥   न,   ॡ㥬     -
⢨    ᠬ,   ⨣  ᯮ짮   ⥬
ᥬ஢.    ,  騥     騥     ।,    
ᯮ짮 ⥬   ᥬ    ⮣,  ⮡  㡥  ⮬,
  ।    ⠥      ᥣ, ० 祬 
  ᠭ  ,     ,  騩    ।  
㤥      ᥣ,    ண        
뢠 楬 ।.


                          

             ।稫    ᬮ७   ।
࣠樨  ⢨    ᠬ,  -  : ࠧ塞
, 㡪  ।.

           ࠧ  ᠬ   ᯮᮡ.
  ࠧ塞    墠뢠  ᮬ    
DosAllocShrSeg(),  㣨          
㭪樨  DosGetShrSeg().     㣮  ஭,    ⠪   
墠   ᥣ            㭪樨  DosAllocSeg()  
⠭   ⮬   ࠧ塞    ,   ᫥    ᮮ⢥饩
樠樨,      㣮          㭪樨
DosGiveSeg().

     㡪  ᮧ  㭪樥  DosMakePipe(),     頥
㪠⥫ ⥭   㡪.    㪠⥫,   
㡪 ⢫ ⠪ ,   ⢫  䠩,  
㭪権  DosRead(),  DosWrite()     DosClose(),    㣨   㭪権,
ਥ஢  ࠡ   䠩. 㡪 筮 ᯮ,  ⮡
ᮥ            㣮,   ᯮ짮    堭
ॠ樨.

     ।    ᫮ ᯮᮡ ⢨  
ᠬ.          ᮢ   ᮧ   ।      
DosCreateQueue()  ;         楬  ।   
⢥,     . ⥭ ⢫  
㭪樨  DosReadQueue().  㣨          
।       DosOpenQueue()               
DosWriteQueue().    ।    ᬠਢ   ( 
   㤠 )    㭪樨 DosPeekQueue(),   㤠
  ।  楫      DosCloseQueue().  ᫮ ᮮ饭 
।  㧭   㭪樨 DosQueryQueue().