Спасибо за комментарии, думаю, я решил проблему, я изменил код:
#include <unistd.h>
#include <sys/stat.h>
int revisanotas(int fd)
{
int nbytes=1;
int nbytese=0;
int i=0;
int n=0;
struct stat datos;
fstat(fd, &datos);
evaluacion buf;
printf("File size = %d \n", datos.st_size);
evaluacion* buffer=(evaluacion*)malloc(datos.st_size);
int actual = read(fd,buffer,datos.st_size);
do
{
i++;
if (buffer[i].notamedia >= 4.5 && buffer[i].notamedia < 5)
{
n=n+1;
/*printf("Notamedia = %f\n",buffer[i].notamedia);
*/
buffer[i].notamedia=5;
}
}while (i<(datos.st_size/(sizeof(evaluacion))));
nbytese=write(fd,buffer,datos.st_size);
printf("Written bytes = %d\n",nbytese);
return(n);
}
Теперь, если условие соответствует, я изменяю буфер. После того, как я прочитал все структуры, я снова записал файл на диск, но у меня все еще есть проблема, каждый раз, вместо того, чтобы записать файл в ту же позицию, мне кажется, что я добавляю ту же информацию после старой, поэтому если я читаю файл один раз, я получаю 3,5 МБ, два раза 7 МБ и так далее: S.
Есть идеи, что я могу сделать?
Спасибо