Пример #1
0
int aio_fsync(
    int            op,
    struct aiocb  *aiocbp
)
{
    rtems_aio_request *req;
    int mode;

    if (op != O_SYNC)
        rtems_aio_set_errno_return_minus_one (EINVAL, aiocbp);

    mode = fcntl (aiocbp->aio_fildes, F_GETFL);
    if (!(((mode & O_ACCMODE) == O_WRONLY) || ((mode & O_ACCMODE) == O_RDWR)))
        rtems_aio_set_errno_return_minus_one (EBADF, aiocbp);

    req = malloc (sizeof (rtems_aio_request));
    if (req == NULL)
        rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);

    req->aiocbp = aiocbp;
    req->aiocbp->aio_lio_opcode = LIO_SYNC;

    return rtems_aio_enqueue (req);

}
Пример #2
0
int
aio_write (struct aiocb *aiocbp)
{
  rtems_aio_request *req;
  int mode;

  mode = fcntl (aiocbp->aio_fildes, F_GETFL);
  if (!(((mode & O_ACCMODE) == O_WRONLY) || ((mode & O_ACCMODE) == O_RDWR)))
    rtems_aio_set_errno_return_minus_one (EBADF, aiocbp);

  if (aiocbp->aio_reqprio < 0 || aiocbp->aio_reqprio > AIO_PRIO_DELTA_MAX)
    rtems_aio_set_errno_return_minus_one (EINVAL, aiocbp);

  if (aiocbp->aio_offset < 0)
    rtems_aio_set_errno_return_minus_one (EINVAL, aiocbp);

  req = malloc (sizeof (rtems_aio_request));
  if (req == NULL)
    rtems_aio_set_errno_return_minus_one (EAGAIN, aiocbp);

  req->aiocbp = aiocbp;
  req->aiocbp->aio_lio_opcode = LIO_WRITE;

  return rtems_aio_enqueue (req);
}