显示已经关闭成功了,为什么还是没有申请到新的fd.
代码:
int Write2SD(char C_data)
{
static int can_filecount = 00000001;//定义一个静态变量用来新建存储can数据的文件。
static int can_datacount = 0;//用来记录一个文件里面的帧数
static uint8_t Creatfile= 1;//用来表示是否需要创建文件
static uint8_t Creatdir = 1;//用来表示是否需要创建文件夹
static int fd = 0;
int res_sync;
int res_write;
int res_close;
//这个函数只负责新建文件夹和新建文件存储数据。
//创建文件夹
if(Creatdir == 1)
{
int res_mk;
res_mk = mkdir("/can_data01",0x777);//创建了can_data01文件夹
if (res_mk < 0)
{
/ 创建目录失败 */
rt_kprintf("dir error!\n");
}
else {
//创建成功,下次进来之后就不再创建;
Creatdir = 0;
}
}
if(Creatfile == 1)
{
char name[50] = "/can_data01/can";
char file_type[] = ".csv";
char count2char[10];
count2char[0] = '\0';
sprintf(count2char,"%d",can_filecount);
strcat(name,count2char);
strcat(name,file_type);
opendir("/can_data01");
fd = open(name, O_CREAT|O_WRONLY);//如果文件不存在则创建一个文件
if(fd>0)
{
Creatfile = 0;//创建成功以后,再次进入函数不再创建文件。
}
else {
rt_kprintf("create file failed\r\n");
}
}
if(fd>0)
{
// rt_kprintf("C_data:%s\r\n",C_data);
res_write = write(fd, C_data, strlen(C_data));
if(res_write >0)
{
;
// rt_kprintf("res_write = %d\r\n",res_write);
}
else
{
rt_kprintf("write error%d \r\n",strlen(C_data));
rt_kprintf("write error \r\n");
}
lseek(fd,0, SEEK_CUR);
res_sync = fsync(fd);//同步,将缓存写到SD卡里面。
can_datacount++;
if(can_datacount>100)
{
can_datacount = 0;//清零计数器
Creatfile = 1;//下次进入函数要创建新文件
can_filecount++;//新建文件的编号
res_close = close(fd);//写完一个文件一定要关闭;
if(res_close == 0)
{
rt_kprintf("close successed:%d\r\n",res_close);
}
else {
rt_kprintf("close failed:%d\r\n",res_close);
}
rt_kprintf("file count:%d,fd = %d\r\n",can_filecount-1,fd);
}
if(res_sync == 0)
{
;
}
else {
rt_kprintf("res_sync failed:%d",res_sync);
}
}
}
更多回帖