fwrite写固定大小长度,超过之后返回文件开头重新写

fwrite写固定大小长度,超过之后返回文件开头重新写;怎么实现啊, 

     log_fd = fopen("xxxx.log", "ab+");
    if (log_fd != NULL)
    {	
		rval = stat("dsp.log", &statbuf);
		if (rval == -1) {
			perror("stat failed");
		} 
		else 
		{
			printf("file size = %lld\n", (long long)statbuf.st_size);
		}
		if((long long)statbuf.st_size > 1024)
		{
		
		}
		fseek(log_fd, 0, SEEK_END);
		len = ftell(log_fd);
			
		if(len > 1024*10)
		{
			printf("file is big 1024*10\n");
			rewind(log_fd);
		}
		
		printf("file len: %d cur %d \n", len, cur);
		fwrite(sz_degmsg, msglen,1, log_fd);
        fclose(log_fd);

加入现在文件大小超过1M,我让他从头循环覆盖写,这样怎么实现不了那?

 

你要在另外一个地方记住当前文件写到哪里了。
因为一旦文件写到1024 X 10这个长度后,你这一次从头写了一段数据,这个长度没有保存的。你下次再来写,第17行返回的值还是1024 X 10,所以你又从头开始写了。
最终你每次都是覆盖前面那一点数据

不知道你的运行环境和整个软件架构不好改啊。如果运行都会退出你的软件,那你必须把数据保存在外部存储介质上,调用这个函数的时候再读回来,也就是说你要用另一个文件保存你这个文件写到哪里了。如果你的软件不会退出,你用个全局变量或者静态局变量保存就行了。
下在我以你的软件不会退出的情况示例一下,用静态局变量保存写文件的位置。
static unsigned int position = 0;
log_fd = fopen("xxxx.log", "ab+");
if (log_fd != NULL)
{
if((position + msglen) > 102410)
{
printf("file is big 1024
10\n");
position = 0;
}
fseek(log_fd, position, SEEK_SET);
fwrite(sz_degmsg, msglen,1, log_fd);
position += msglen;
fclose(log_fd);



```c
log_fd = fopen("dsp.log", "ab+");
    if (log_fd != NULL)
    {    
        if((position + msglen) > 29840)
        {
            printf("file is big 102410\n");
            position = 0;
        }
        fseek(log_fd, position, SEEK_SET);
        fwrite(sz_degmsg, msglen,1, log_fd);
        position += msglen;
        fclose(log_fd);    
    }

```
刚试了下,好像还是不行的,很奇怪;