C库中结构体的封装方法

当我们编写C语言库时,如果定义了某个结构体,并且库的使用者需要使用到这个结构体,但我们又不希望结构体的结构暴露在外,可以采用如下方式:1.在.c文件中定义结构体2.头文件中使用typedef为这个结构体定义别的名称。这样库的使用者只需使用这个别名,而无需(也无法)知道结构体成员有哪些。上面讲的有点绕,给个示意图。

 在使用openssl的库的时候可以看到这种用法

我们只能定义指向EVP_CIPHER_CTX的指针,而不能定义该结构体变量,否则会提示“不允许使用不完整的类型”

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
libevent是一个事件处理库,它提供了一种异步I/O模型,可以在同一个线程中同时处理多个网络连接。它可以用于编写高性能和可伸缩的网络服务。 封装libevent的C库可以提供更高级别的抽象,使得使用libevent更加方便和易用。以下是一个简单的封装libevent的C库的示例: ```c #include <event2/event.h> typedef struct event_loop_t { struct event_base *base; } event_loop_t; typedef struct event_t { struct event *ev; } event_t; event_loop_t * event_loop_create() { event_loop_t *loop = malloc(sizeof(event_loop_t)); loop->base = event_base_new(); return loop; } void event_loop_destroy(event_loop_t *loop) { event_base_free(loop->base); free(loop); } event_t * event_create(event_loop_t *loop, int fd, short events, void (*cb)(int, short, void *), void *arg) { event_t *ev = malloc(sizeof(event_t)); ev->ev = event_new(loop->base, fd, events, cb, arg); event_add(ev->ev, NULL); return ev; } void event_destroy(event_t *ev) { event_del(ev->ev); event_free(ev->ev); free(ev); } void event_loop_run(event_loop_t *loop) { event_base_dispatch(loop->base); } ``` 在这个封装库中,我们定义了两个结构体:event_loop_t和event_t。event_loop_t代表一个事件循环,event_t代表一个事件。我们提供了一些基本的函数,如创建和销毁事件循环、创建和销毁事件、运行事件循环等。 使用这个库非常简单。以下是一个简单的示例: ```c void read_cb(int fd, short events, void *arg) { char buf[1024]; int n = read(fd, buf, sizeof(buf)); if (n < 0) { perror("read"); return; } buf[n] = '\0'; printf("read: %s\n", buf); } int main() { event_loop_t *loop = event_loop_create(); int fd = open("file.txt", O_RDONLY); event_create(loop, fd, EV_READ, read_cb, NULL); event_loop_run(loop); event_loop_destroy(loop); return 0; } ``` 在这个示例中,我们创建了一个事件循环,打开了一个文件,创建了一个读事件并将其添加到事件循环中。当文件可读时,read_cb函数将被调用并从文件中读取数据。 封装libevent的C库可以大大简化使用libevent的过程,使其更加适合普通开发人员。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mrbone11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值