aio_read вызывает неправильный адрес в OSX

У меня есть асинхронный код в OSX, который в основном делает следующее:

aiocb request;
memset(&request, 0 sizeof(request));

char buffer[64 * 1024];
int filedes = open(path, O_RDONLY);

request->aio_offset = offset;
request->aio_fildes = filedes;
request->aio_buf = buffer;
request->aio_nbytes = 64 * 1024;
request->aio_lio_opcode = LIO_READ;

int result = aio_read(&request);
result = aio_suspend(&request, 1, Riot::INFINITE_WAIT);
int error = aio_error(&request);

Смещение не выровнено, и буфер не имеет ограничений на выравнивание. (Я знаю, что это «бессмысленный» способ использования async io для синхронного чтения, но это не имеет значения для моего вопроса).

При определенных условиях, когда я запускаю этот код, я получаю код ошибки 14 (неверный адрес). Я думаю, что проблема в том, что, возможно, чтение уходит из конца буфера и записывает поверх filedes,

Кто-нибудь испытывал нечто подобное?

OSX документация не упоминает никаких требований для выравнивания, просто желание не иметь буфер в стеке, так как он асинхронный (который не применяется, если мы блокируем, пока чтение не закончено). Но я нашел некоторые документация на aio_read это говорит о том, что буфер и размер должны быть выровнены на 512 байт. Кто-нибудь знает, применяется ли это ограничение (или любые другие ограничения выравнивания) к OSX? aio_read?

Любые другие идеи о том, что может происходить здесь?

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]