Rio

代码阅读: redis-rio

rio.h, rio.c是redis内部对部分io的一个封装,封装之后不管是buffer, 还是file, 还是fdset, 它们都是rio对象,有统一的write, read等函数,外部调用它们的时候不用关心 底层细节. 从这里可以学到c里面怎么来实现面向对象编程,我们会发现面向对象只是一种思想, 跟语言无关,并不需要class关键词. 先看rio.h里rio的这个结构的定义(篇幅限制,只copy部分) struct _rio { size_t (*read)(struct _rio *, void *buf, size_t len); size_t (*write)(struct _rio *, const void *buf, size_t len); off_t (*tell)(struct _rio *); int (*flush)(struct _rio *); size_t processed_bytes; /* number of bytes read or written */ size_t max_processing_chunk; /* maximum single read or write chunk size */ union { struct { sds ptr; off_t pos; } buffer; struct { FILE *fp; off_t buffered; /* Bytes written since last fsync.