我的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);
}
最佳答案
您可以在VM中的多个进程中使用共享内存,但无法在VM中运行的进程与主机O / S,Windows中运行的进程之间共享内存。如果虚拟机正在运行Debian,则需要使用以下方法之一:mmap()
。shmget()
,shmctl()
,shmat()
,shmdt()
—“ System V IPC”共享内存调用。shm_open()
,shm_unlink()
-最近的,更类似于POSIX的共享内存调用。
您可能需要两个连接到同一共享内存段的程序。他们可能会将细分映射到相同的地址。如果将指针存储在共享内存中,则至关重要的是将它们映射到相同的地址。如果存储相对于共享内存段的基地址的偏移量,则将它们映射到相同的地址并不重要。