轉載請標明出處;
最近在看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; }