转载请标明出处;
最近在看redis的代码,发现了有关函数指针的部分,想把它记下来。
在redis中有类似下面的定义,利用typedef 定义了一个新的类型,这种类型是一个函数:
typedef void aeFileProc(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask);
然后可以用这个类型定义一个指针,这个指针指向一个函数,具体redis中使用如下(具体redis的源码解析,后面的文章中还会提到):
aeFileProc *rfileProc; aeFileProc *wfileProc;
int aeCreateFileEvent(aeEventLoop *eventLoop, int fd, int mask, aeFileProc *proc, void *clientData) { if (fd >= eventLoop->setsize) { errno = ERANGE; return AE_ERR; } aeFileEvent *fe = &eventLoop->events[fd]; if (aeApiAddEvent(eventLoop, fd, mask) == -1) return AE_ERR; fe->mask |= mask; if (mask & AE_READABLE) fe->rfileProc = proc; if (mask & AE_WRITABLE) fe->wfileProc = proc; fe->clientData = clientData; if (fd > eventLoop->maxfd) eventLoop->maxfd = fd; return AE_OK; }
时间: 2024-10-12 21:25:50