Я просматривал этот исходный код, предоставленный разработчиками библиотеки под названием libuv. В некоторых примерах кода они передают функцию в качестве параметра для другой функции, но ни один из необходимых параметров не передается. Как заполняются параметры? Я смотрю на функцию uv_fs_open.
Вот ссылка на источник (ищите код функции в строке 1000): nofollow">https://github.com/libuv/libuv/blob/202195c2f45ced200ccf880ff4502eee94f11ab5/src/unix/fs.c
Вот пример кода:
int main() {
loop = uv_default_loop();
int r = uv_fs_open(loop, &open_req, path, O_RDONLY, S_IRUSR, open_cb);
if (r) {
fprintf(stderr, "Error at opening file: %s.\n",
uv_strerror(uv_last_error(loop)));
}
uv_run(loop, UV_RUN_DEFAULT);
return 0;
}
void open_cb(uv_fs_t* req) {
int result = req->result;
if (result == -1) {
fprintf(stderr, "Error at opening file: %s.\n",
uv_strerror(uv_last_error(loop)));
}
uv_fs_req_cleanup(req);
uv_fs_read(loop, &read_req, result, buf, sizeof(buf), -1, read_cb);
}
uv_fs_open
предоставляет параметры, когда он вызываетopen_cb
, который был предоставлен как параметр указателя функции. - person WhozCraig   schedule 27.05.2015open_cb
вuv_fs_open
без аргументов? Это потому, что вы не указываете там аргументы, вы только сообщаетеuv_fs_open
, какую функцию вызывать, чтобы она могла предоставить аргументы. - person Weather Vane   schedule 27.05.2015uv_fs_open
ничего не делает со своим аргументомcb
(который был передан какopen_cb
), заключается в том, что он обрабатывается макросом с именемPOST
- person Weather Vane   schedule 27.05.2015