共享段存储器写入随机数

时间:2014-09-04 16:02:56

标签: c memory process buffer shared

我的C程序存在逻辑问题。我正在尝试创建一个进程,写入一个内存缓冲区,如10个随机数,也在文本文件中。我已经在我的代码中看到了,但我似乎无法理解如何使用共享内存来执行此操作。

我试图理解我必须首先定义缓冲区大小并将id存储到项目中然后我必须将我的随机数存储在该项目数组中。我在想错吗? 我错过了我的逻辑吗?

这是我到目前为止所做的:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <fcntl.h>
#include <errno.h>
int main()
{

    int i, n;
    time_t t;

     n = 10;

    srand((unsigned) time(&t));

    FILE *fp;
    fp = fopen ("letter.txt","a+");
    if (fp == NULL) {
        printf ("File not created okay, errno = %d\n", errno);
        return 1;
    }
    for( i = 0 ; i < n ; i++ ) {
        fprintf(fp,"%d\n", rand() % 10);


        /* here is where I would store the random numbers in the buffer */
    }

    fclose (fp);
    printf ("File created okay\n");
    scanf();
    return(0);
}

1 个答案:

答案 0 :(得分:0)

您可以在VM中的多个进程中使用共享内存,但是您无法在VM中运行的进程与主机O / S,Windows中运行的进程之间共享内存。如果VM正在运行Debian,那么您需要使用以下之一:

  1. mmap()
  2. shmget()shmctl()shmat()shmdt() - System V IPC&#39;共享内存调用。
  3. shm_open()shm_unlink() - 更近期,更像POSIX的共享内存调用。
  4. 您可能需要两个连接到同一共享内存段的程序。他们可能会将该段映射到同一地址。如果将指针存储在共享内存中,则将它们映射到同一地址至关重要。如果存储相对于共享内存段的基址的偏移量,则将它们映射到同一地址并不重要。