函数 fputc 是输出字符的底层函数,只需要实现这个函数,类似 printf、puts 等函数也可以正常使用了。
由于存在3种文件类型,这里分别定义3种文件类型的fputc函数,在 fputc 中统一调用。
- // 设备文件写入一个字符
- static int fputc_dev(int c,FILE * stream)
- {
- const libc_device_file *dev=stream->dev;
- if(dev)
- {
- if(dev->putc)
- {
- dev->putc(c);
- return c;
- }
- }
- return EOF;
- }
- // 内存文件写入一个字符
- static int fputc_mem(int c,FILE * stream)
- {
- libc_mem_file *mem=stream->mem;
- if(mem)
- {
- if(mem->ptr<mem->size)
- {
- mem->data[mem->ptr]=c;
- mem->ptr++;
- return c;
- }
- }
- return EOF;
- }
- // 普通文件写入一个字符
- static int fputc_fil(int c,FILE * stream)
- {
- uint8_t d=c;
- if(fwrite(&d, 1, 1, stream)==1)
- return c;
- else
- return EOF;
- }
- static int (*const g_putc_funs[3])(int,FILE *)={
- fputc_fil,
- fputc_dev,
- fputc_mem,
- };
- // 写入一个字符
- int fputc(int c, FILE * stream)
- {
- if(stream)
- {
- return g_putc_funs[stream->type](c,stream);
- }
- return EOF;
- }
|