在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ 共享內(nèi)存
命名管道
消息隊(duì)列
進(jìn)程創(chuàng)建與終止
信號(hào)量
進(jìn)程組,會(huì)話和作業(yè)控制
共享內(nèi)存
進(jìn)程間通信簡(jiǎn)介
子進(jìn)程監(jiān)視
其他進(jìn)程
覆蓋進(jìn)程映像
進(jìn)程信息
進(jìn)程映像
內(nèi)存映射
相關(guān)系統(tǒng)調(diào)用(System V)
進(jìn)程資源
System V & Posix
信號(hào)
進(jìn)程間通信教程
管道

共享內(nèi)存

共享內(nèi)存是兩個(gè)或多個(gè)進(jìn)程共享的內(nèi)存。 但是,為什么我們需要共享內(nèi)存或其他通信方式呢?

重申一下,每個(gè)進(jìn)程都有自己的地址空間,如果任何進(jìn)程想要將自己的地址空間的某些信息與其他進(jìn)程進(jìn)行通信,那么只能通過(guò)IPC(進(jìn)程間通信)技術(shù)進(jìn)行。 我們已經(jīng)知道,通信可以在相關(guān)或不相關(guān)的進(jìn)程之間進(jìn)行。

通常,使用管道或命名管道來(lái)執(zhí)行相互關(guān)聯(lián)的進(jìn)程通信。 可以使用命名管道或通過(guò)共享內(nèi)存和消息隊(duì)列的常用IPC技術(shù)執(zhí)行無(wú)關(guān)的進(jìn)程(例如在一個(gè)終端中運(yùn)行一個(gè)進(jìn)程而在另一個(gè)終端中運(yùn)行另一個(gè)進(jìn)程)通信。

我們已經(jīng)看到了管道和命名管道的IPC技術(shù),現(xiàn)在來(lái)了解其他的IPC技術(shù),即共享內(nèi)存,消息隊(duì)列,信號(hào)量,信號(hào)和內(nèi)存映射。

在本章中,我們將會(huì)了解所有關(guān)于共享內(nèi)存的知識(shí)。

我們知道,為了在兩個(gè)或多個(gè)進(jìn)程之間進(jìn)行通信,使用共享內(nèi)存。但是在使用共享內(nèi)存之前,系統(tǒng)調(diào)用需要完成,讓我們看看 -

  • 創(chuàng)建共享內(nèi)存段或使用已經(jīng)創(chuàng)建的共享內(nèi)存段(shmget())
  • 將進(jìn)程附加到已經(jīng)創(chuàng)建的共享內(nèi)存段(shmat())
  • 從已連接的共享內(nèi)存段(shmdt())中分離進(jìn)程
  • 共享內(nèi)存段上的控制操作(shmctl())

讓我們看看與共享內(nèi)存有關(guān)的系統(tǒng)調(diào)用的一些細(xì)節(jié)。

#include <sys/ipc.h>
#include <sys/shm.h>

int shmget(key_t key, size_t size, int shmflg)

上述系統(tǒng)調(diào)用將創(chuàng)建或分配一個(gè)System V共享內(nèi)存段。 需要傳遞的參數(shù)如下 -

  • 第一個(gè)參數(shù)key用于識(shí)別共享內(nèi)存段。key可以是任意值,也可以是來(lái)自庫(kù)函數(shù)ftok()的值。 key也可以是IPC_PRIVATE,意思是運(yùn)行進(jìn)程作為服務(wù)器和客戶機(jī)(父子關(guān)系),即相互關(guān)聯(lián)的進(jìn)程通信。 如果客戶端想用這個(gè)key來(lái)使用共享內(nèi)存,那么它必須是服務(wù)器的子進(jìn)程。 另外,子進(jìn)程需要在父進(jìn)程獲得共享內(nèi)存之后創(chuàng)建。
  • 第二個(gè)參數(shù)size是四舍五入PAGE_SIZE的倍數(shù)的共享內(nèi)存段的大小。
  • 第三個(gè)參數(shù)shmflg指定所需的共享內(nèi)存標(biāo)志,例如IPC_CREAT(創(chuàng)建新段)或IPC_EXCL(與IPC_CREAT一起用于創(chuàng)建新段,如果段已經(jīng)存在,則調(diào)用失敗)。 還需要傳遞權(quán)限。

- 有關(guān)權(quán)限的詳細(xì)信息,請(qǐng)參閱前面幾節(jié)。

這個(gè)調(diào)用會(huì)在成功時(shí)返回一個(gè)有效的共享內(nèi)存標(biāo)識(shí)符(用于進(jìn)一步調(diào)用共享內(nèi)存),在失敗時(shí)返回-1。 要知道失敗的原因,請(qǐng)查看errno變量或perror()函數(shù)的值。

#include <sys/types.h>
#include <sys/shm.h>

void * shmat(int shmid, const void *shmaddr, int shmflg)

上述系統(tǒng)調(diào)用為系統(tǒng)V共享內(nèi)存段執(zhí)行共享內(nèi)存操作,即將共享內(nèi)存段附加到調(diào)用進(jìn)程的地址空間。 需要傳遞的參數(shù)如下 -

  • 第一個(gè)參數(shù)shmid是共享內(nèi)存段的標(biāo)識(shí)符。 這個(gè)id是共享內(nèi)存標(biāo)識(shí)符,它是shmget()系統(tǒng)調(diào)用的返回值。

  • 第二個(gè)參數(shù)shmaddr是指定附加地址。 如果shmaddrNULL,則系統(tǒng)默認(rèn)選擇合適的地址來(lái)附加分段。 如果shmaddr不是NULL并且在shmflg中指定了SHM_RND,那么attach等于SHMLBA(下邊界地址)的最接近倍數(shù)的地址。 否則,shmaddr必須是共享內(nèi)存附件發(fā)生/啟動(dòng)的頁(yè)面對(duì)齊地址。

  • 第三個(gè)參數(shù)shmflg指定所需的共享內(nèi)存標(biāo)志,例如SHM_RND(舍入到SHMLBA的地址)或SHM_EXEC(允許執(zhí)行段的內(nèi)容)或SHM_RDONLY(默認(rèn)為只讀目的附加段 它是可讀寫(xiě)的)或SHM_REMAP(替換shmaddr指定范圍內(nèi)的現(xiàn)有映射并繼續(xù)到段的結(jié)尾)。
    這個(gè)調(diào)用會(huì)在成功時(shí)返回附加共享內(nèi)存段的地址,在失敗的情況下返回-1。 要知道失敗的原因,請(qǐng)檢查errno變量或perror()函數(shù)。
#include <sys/types.h>
#include <sys/shm.h>

int shmdt(const void *shmaddr)

上述系統(tǒng)調(diào)用對(duì)共享內(nèi)存段從調(diào)用進(jìn)程地址空間中分離出來(lái)的System V共享內(nèi)存段執(zhí)行共享內(nèi)存操作。需要傳遞的參數(shù)如下 -

  • 參數(shù)shmaddr是要分離的共享內(nèi)存段的地址。待分離的段必須是由shmat()系統(tǒng)調(diào)用返回的地址。

這個(gè)調(diào)用在成功時(shí)將返回0,在失敗的情況下為-1。 要知道失敗的原因,請(qǐng)檢查errno變量或perror()函數(shù)。

#include <sys/ipc.h>
#include <sys/shm.h>

int shmctl(int shmid, int cmd, struct shmid_ds *buf)

上述系統(tǒng)調(diào)用對(duì)System V共享內(nèi)存段進(jìn)行控制操作。需要傳遞的參數(shù)如下 -

  • 第一個(gè)參數(shù)shmid是共享內(nèi)存段的標(biāo)識(shí)符。 這個(gè)id是共享內(nèi)存標(biāo)識(shí)符,它是shmget()系統(tǒng)調(diào)用的返回值。
  • 第二個(gè)參數(shù)cmd是對(duì)共享內(nèi)存段執(zhí)行所需控制操作的命令。cmd的有效值有 -
    • IPC_STAT - 將struct shmid_ds的每個(gè)成員的當(dāng)前值的信息復(fù)制到由buf指向的傳遞的結(jié)構(gòu)。 該命令需要對(duì)共享內(nèi)存段的讀取權(quán)限。
    • IPC_SET - 設(shè)置結(jié)構(gòu)buf指向的用戶ID,所有者的組ID,權(quán)限等。
    • IPC_RMID - 標(biāo)記要銷毀的段。 該段只有在最后一個(gè)進(jìn)程分離后才被銷毀。
    • IPC_INFO - 返回有關(guān)buf指向的結(jié)構(gòu)中共享內(nèi)存限制和參數(shù)的信息。
    • SHM_INFO - 返回一個(gè)shm_info結(jié)構(gòu),其中包含有關(guān)共享內(nèi)存所消耗的系統(tǒng)資源的信息。
  • 第三個(gè)參數(shù)buf是一個(gè)指向名為struct shmid_ds的共享內(nèi)存結(jié)構(gòu)的指針。 這個(gè)結(jié)構(gòu)的值將被用于任一集或者按照cmd得到。

此調(diào)用根據(jù)傳遞的命令返回值。 在IPC_INFOSHM_INFOSHM_STAT成功之后,返回共享內(nèi)存段的索引或標(biāo)識(shí)符,或者返回其他操作的0,否則返回-1。 要知道失敗的原因,請(qǐng)檢查errno變量或perror()函數(shù)。

讓我們考慮下面的示例程序。

  • 創(chuàng)建兩個(gè)進(jìn)程,一個(gè)用于寫(xiě)入共享內(nèi)存(shm_write.c),另一個(gè)用于從共享內(nèi)存(shm_read.c)讀取。
  • 程序通過(guò)寫(xiě)入過(guò)程(shm_write.c)執(zhí)行寫(xiě)入共享內(nèi)存,并通過(guò)讀取過(guò)程(shm_read.c)從共享內(nèi)存讀取。
  • 在共享內(nèi)存中,寫(xiě)入過(guò)程創(chuàng)建一個(gè)大小為1K(和標(biāo)志)的共享內(nèi)存并附加共享內(nèi)存
  • 寫(xiě)入過(guò)程將每個(gè)1023個(gè)字節(jié)從’A’到’E’的字母寫(xiě)入共享存儲(chǔ)器5次。 最后一個(gè)字節(jié)表示緩沖區(qū)的結(jié)束。
  • 讀取過(guò)程將從共享內(nèi)存讀取并寫(xiě)入標(biāo)準(zhǔn)輸出。
  • 讀取和寫(xiě)入過(guò)程操作是同時(shí)執(zhí)行的。
  • 寫(xiě)入完成后,寫(xiě)入過(guò)程將更新以指示寫(xiě)入共享內(nèi)存的完成(在struct shmseg中具有完整變量)
  • 讀取過(guò)程執(zhí)行從共享內(nèi)存中讀取并顯示在輸出上,直到它得到寫(xiě)入過(guò)程完成的指示(struct shmseg中的完整變量)
  • 執(zhí)行幾次簡(jiǎn)單的讀寫(xiě)過(guò)程,以避免無(wú)限循環(huán)和復(fù)雜的程序。

以下是寫(xiě)入過(guò)程的代碼(寫(xiě)入共享內(nèi)存 - 文件:shm_write.c)

/* Filename: shm_write.c */
#include<stdio.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<string.h>
#include<errno.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>

#define BUF_SIZE 1024
#define SHM_KEY 0x1234

struct shmseg {
   int cnt;
   int complete;
   char buf[BUF_SIZE];
};
int fill_buffer(char * bufptr, int size);

int main(int argc, char *argv[]) {
   int shmid, numtimes;
   struct shmseg *shmp;
   char *bufptr;
   int spaceavailable;
   shmid = shmget(SHM_KEY, sizeof(struct shmseg), 0644|IPC_CREAT);
   if (shmid == -1) {
      perror("Shared memory");
      return 1;
   }

   // Attach to the segment to get a pointer to it.
   shmp = shmat(shmid, NULL, 0);
   if (shmp == (void *) -1) {
      perror("Shared memory attach");
      return 1;
   }

   /* Transfer blocks of data from buffer to shared memory */
   bufptr = shmp->buf;
   spaceavailable = BUF_SIZE;
   for (numtimes = 0; numtimes < 5; numtimes++) {
      shmp->cnt = fill_buffer(bufptr, spaceavailable);
      shmp->complete = 0;
      printf("Writing Process: Shared Memory Write: Wrote %d bytes\n", shmp->cnt);
      bufptr = shmp->buf;
      spaceavailable = BUF_SIZE;
      sleep(3);
   }
   printf("Writing Process: Wrote %d times\n", numtimes);
   shmp->complete = 1;

   if (shmdt(shmp) == -1) {
      perror("shmdt");
      return 1;
   }

   if (shmctl(shmid, IPC_RMID, 0) == -1) {
      perror("shmctl");
      return 1;
   }
   printf("Writing Process: Complete\n");
   return 0;
}

int fill_buffer(char * bufptr, int size) {
   static char ch = 'A';
   int filled_count;

   //printf("size is %d\n", size);
   memset(bufptr, ch, size - 1);
   bufptr[size-1] = '\0';
   if (ch > 122)
   ch = 65;
   if ( (ch >= 65) && (ch <= 122) ) {
      if ( (ch >= 91) && (ch <= 96) ) {
         ch = 65;
      }
   }
   filled_count = strlen(bufptr);

   //printf("buffer count is: %d\n", filled_count);
   //printf("buffer filled is:%s\n", bufptr);
   ch++;
   return filled_count;
}

編譯并執(zhí)行上面示例代碼,得到以下結(jié)果 -

Writing Process: Shared Memory Write: Wrote 1023 bytes
Writing Process: Shared Memory Write: Wrote 1023 bytes
Writing Process: Shared Memory Write: Wrote 1023 bytes
Writing Process: Shared Memory Write: Wrote 1023 bytes
Writing Process: Shared Memory Write: Wrote 1023 bytes
Writing Process: Wrote 5 times
Writing Process: Complete

以下是讀取過(guò)程的代碼(從共享內(nèi)存讀取并寫(xiě)入標(biāo)準(zhǔn)輸出 - 文件:shm_read.c)

/* Filename: shm_read.c */
#include<stdio.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<string.h>
#include<errno.h>
#include<stdlib.h>

#define BUF_SIZE 1024
#define SHM_KEY 0x1234

struct shmseg {
   int cnt;
   int complete;
   char buf[BUF_SIZE];
};

int main(int argc, char *argv[]) {
   int shmid;
   struct shmseg *shmp;
   shmid = shmget(SHM_KEY, sizeof(struct shmseg), 0644|IPC_CREAT);
   if (shmid == -1) {
      perror("Shared memory");
      return 1;
   }

   // Attach to the segment to get a pointer to it.
   shmp = shmat(shmid, NULL, 0);
   if (shmp == (void *) -1) {
      perror("Shared memory attach");
      return 1;
   }

   /* Transfer blocks of data from shared memory to stdout*/
   while (shmp->complete != 1) {
      printf("segment contains : \n\"%s\"\n", shmp->buf);
      if (shmp->cnt == -1) {
         perror("read");
         return 1;
      }
      printf("Reading Process: Shared Memory: Read %d bytes\n", shmp->cnt);
      sleep(3);
   }
   printf("Reading Process: Reading Done, Detaching Shared Memory\n");
   if (shmdt(shmp) == -1) {
      perror("shmdt");
      return 1;
   }
   printf("Reading Process: Complete\n");
   return 0;
}

執(zhí)行上面示例代碼,得到以下結(jié)果 -

segment contains :
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
Reading Process: Shared Memory: Read 1023 bytes
segment contains :
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
Reading Process: Shared Memory: Read 1023 bytes
segment contains :
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
Reading Process: Shared Memory: Read 1023 bytes
segment contains :
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
Reading Process: Shared Memory: Read 1023 bytes
segment contains :
"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
Reading Process: Shared Memory: Read 1023 bytes
Reading Process: Reading Done, Detaching Shared Memory
Reading Process: Complete