linux中的最新libaio API(/usr/include/libaio.h)定义了io_event,如下所示:
struct io_event {
PADDEDptr(void *data, __pad1);
PADDEDptr(struct iocb *obj, __pad2);
PADDEDul(res, __pad3);
PADDEDul(res2, __pad4);
};
PADDEDul解析为:
#define PADDEDul(x, y) unsigned long x; unsigned y
我读过的所有例子都说如果'res'为负,则系统调用期间发生错误,res包含负'errno'变量。我的问题是,如果声明为unsigned long long,'res'如何包含负errno?如果'res'不再包含错误代码,我在哪里可以获得写入或读取系统调用?
答案 0 :(得分:0)
请将libaio的定义与/usr/include/linux/aio_abi.h中的定义进行比较。你会发现'res'和'res2'实际上被定义为那里的有符号整数。
以下是aio_abi.h的链接,方便您使用:http://kerneldox.com/kdox-linux/dd/db4/aio__abi_8h_source.html
此外,使用glibc中的syscall()包装内核AIO API是一个可接受的选项。学习这些内核API将是一个令人印象深刻且有利可图的体验。首先,了解nginx如何使用它们。
快乐黑客!