繁体   English   中英

I / O库的接口

[英]Interface for I/O library

当有人想建立一个用于处理I / O(处理特定文件格式)的C库时,他们几乎必须提供以下内容:

/* usual opaque struct setup */
struct my_context;
typedef struct my_context my_context_t;

/* Open context for reading from user specified callbacks */
my_context_t* my_open_callback(void* userdata,
    size_t(*read_cb)(void* data, size_t size, size_t count, void* userdata),
    int(*close_cb)(void* userdata),
    void(*error_cb)(const char* error_msg)
    );

然后提供一些常用的:

/* Open directly from file */
my_context_t* my_open_file(const char * filename);

/* Open from an existing memory block */
my_context_t* my_open_memory(const char* buf, size_t len);

据了解,可能还有其他方法,但这是否被认为是为了减少设计中的不一致,不安全的做法和效率低下的问题,或者是否有其他最佳做法? 此惯例/最佳做法是否有名称?

这些是界面设计问题。 一个好的接口提供了有用的抽象并隐藏了实现细节。 在您的示例中, my_context_t从用户群中my_context_t一些实现细节,前提是您没有在公共头文件中完全定义类型。 这使您可以自由地对实现进行重大更改,而不必强迫整个用户群重写其代码。 如果其余的抽象都很好地适合了问题空间,那么这是一个很好的做法。 有时,您只需要承诺在接口级别公开其他细节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM