libaio:获取事件错误代码

时间:2013-04-08 00:18:03

标签: c linux

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'不再包含错误代码,我在哪里可以获得写入或读取系统调用?

1 个答案:

答案 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如何使用它们。

快乐黑客!