【发布时间】:2014-09-04 16:02:56
【问题描述】:
我的 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);
}
【问题讨论】:
-
您使用的是哪个平台?哪个函数需要管理该平台上的共享内存段? (例如,在 POSIX 系统上至少有两组共享内存调用,加上
mmap()。)您实际尝试过什么?专业提示:在您可以将确定性数据写入共享内存之后添加随机化。当数据是随机的时,很难发现你所做的是否正确。您打算如何检查已写入共享内存的内容?提示:共享内存通常涉及多个进程共享对单个内存块的访问。 -
请注意,带有零参数的
scanf()调用是一场等待发生的灾难。您至少需要格式字符串参数。 -
哦,我明白了,让我改变我的 scanf 然后我使用 windows,但我也在我的计算机中使用 debian vm,并使用 putty 和 nano 在 debian 中写入......所以有一大块两个或多个进程使用的内存我必须指向相同的内存地址吗?
标签: c memory process buffer shared