RT-Thread elmfat使用f_gets函数

RT-Thread 默认是没有使能f_gets函数的,再ffconf.h中可以对其进行设置。
在这里插入图片描述
将其中的宏定义改为

#define	_USE_STRFUNC	1
/* This option switches string functions, f_gets(), f_putc(), f_puts() and
/  f_printf().
/
/  0: Disable string functions.
/  1: Enable without LF-CRLF conversion.
/  2: Enable with LF-CRLF conversion. */

测试代码如下:

static void readwrite_sample(void)
{
    
    

    char s[100] = "asdf\nqwer\r\nzxcv\rasdf\nqwer\r\nzxcv\r123\r\n";
    char buffer[128];

    FIL *fp = RT_NULL;
    size_t size = 0;
    int bw;
    fp = rt_malloc(sizeof(FIL));

    f_open(fp, "/text.txt", FA_OPEN_ALWAYS | FA_WRITE);
    f_write(fp, s, strlen(s), &bw);
    f_close(fp);

    f_open(fp, "/text.txt", FA_OPEN_EXISTING | FA_READ);
    size = f_size(fp);
    rt_kprintf("file size=>%d\n", size);
    while (1)
    {
    
    
        int ret = f_gets(buffer, 128, fp);
        if (ret == RT_NULL)
            break;
        rt_kprintf("ret=>%x,size=>%d,buff=>%s\n", ret, size, buffer);
        rt_thread_mdelay(100);
    }
    f_close(fp);
    rt_kprintf("...\n");
    rt_free(fp);

}

显示结果如下:

msh />readwrite_sample
file size=>37
ret=>20008ed0,size=>37,buff=>asdf

ret=>20008ed0,size=>37,buff=>qwer

asdf>20008ed0,size=>37,buff=>zxcv

ret=>20008ed0,size=>37,buff=>qwer

123=>20008ed0,size=>37,buff=>zxcv

...

可以发现,\r\n和\n都会被认作行结束标志,但/r会在下一行的开头进行输出(这里可能是xshell的显示支持原因)。

另外关于对函数的使用介绍,可以参考另一篇博文:FATFS 初学之 f_gets/ f_putc/ f_puts/ f_printf

猜你喜欢

转载自blog.csdn.net/qq_27508477/article/details/108533696
今日推荐