首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C在派生进程中仅共享内存1024 int

C在派生进程中仅共享内存1024 int
EN

Stack Overflow用户
提问于 2017-06-17 04:46:57
回答 0查看 165关注 0票数 0

我应该写一个将整数写入共享内存的程序,派生一个子进程,子进程应该读取这些整数。

shm.c

代码语言:javascript
复制
#define N_SHARED 2000

int main(int argc, char **argv) {
/* Ein Shared-Memory-Segment einrichten */
shmid = shmget(IPC_PRIVATE, N_SHARED, IPC_CREAT | SHM_R | SHM_W);

if (shmid == -1) {
 perror("shmid");
 exit(1);
}

 /* Pointer zu Sharedm-Memory-Segment erhalten */
shmData = (int *)shmat(shmid,0, N_SHARED);
if (shmData == (int *)(-1)) {
  perror("shmat");
  exit(1);
}

/** ininitalisieren des Zufallsgenerator durch aktuellen Zeitstempel */
srand48(time(NULL));
for (i=0; i<N_SHARED; i++) {
 shmData[i] = lrand48();
 printf("SHM-->%d-->%d\n",i+1,shmData[i]);
}

  pid = fork();

  snprintf(shmidArg,32, "%d", shmid);

  // Kindprozess
  if (pid == 0) {
    execlp("./shm_child",shmidArg,NULL);
  } else if (pid < 0) {
        perror("Kindprozess konnte nicht erzeugt werden!");
        return 1;
  }

shm_child.c

代码语言:javascript
复制
  #define N_SHARED 2000

  int i;
  int *shmData;
  static int shmid;

  int main(int argc, char **argv) {
    shmid = atoi(argv[0]);
    printf("shm_child shared memoryid:%d\n",shmid);

    /* Shared-Memory laden */
    shmData = (int *)shmat(shmid,0,0);
    if (shmData == (int *)(-1)) {
        perror("shmat");
        exit(1);
    }


    for(i=0;i<N_SHARED;i++) {
      printf("%d --> %d\n",i+1,shmData[i]);
    }

我的问题是:索引1024之后的每个数字在child_process中都是0,但在主进程中不是。

谢谢

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44597750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档