【发布时间】:2009-11-14 18:04:40
【问题描述】:
我正在使用此代码将文件读入缓冲区。该文件充满了evaluacion 类型的structs(包括一些char 和int 变量)。
现在我将整个文件放在缓冲区中,我现在如何在缓冲区中找到一个变量的值?
例如buf.notamedia < 4。文件中应该有很多。
#include <unistd.h>
#include <sys/stat.h>
int revisanotas(int fd)
{
int nbytes = 1;
int nbytese = 0;
evaluacion buf;
struct stat datos;
fstat(fd, &datos);
printf("Size of file = %d \n", datos.st_size);
char *buffer = (char *)malloc(datos.st_size);
int actual = read(fd, buffer, datos.st_size);
printf("actual = %d\n", actual);
if (buf.notamedia >= 4.5 && buf.notamedia < 5)
{
/* ... */
}
}
任何想法都非常欢迎
我正在按照你说的做,但是我只进行了一次迭代,我不知道我做错了什么:(
evaluacion* buffer=(evaluacion*)malloc(datos.st_size);
int actual = read(fd,buffer,datos.st_size);
printf("Number of structs = %d", (datos.st_size/(sizeof(evaluacion))));
for (i=0;i<(datos.st_size/(sizeof(evaluacion)));i++);
{
printf("Notamedia = %f\n",buffer[i].notamedia);
if (buffer[i].notamedia >= 4.5 && buffer[i].notamedia < 5)
{
printf("Notamedia = %f\n",buffer[i].notamedia);
}
{
}
}
}
【问题讨论】:
-
不要忘记将您的读取放入循环中以读取整个文件。此外,仅 mmap() 文件可能更容易。
-
@Suppressingfire:无论如何,在 fstat() 函数执行时,他都会进行一次读取以获取整个文件。