aio_read from file error on OS X

Posted by Pyetras on Stack Overflow See other posts from Stack Overflow or by Pyetras
Published on 2011-01-12T05:28:24Z Indexed on 2011/01/12 5:54 UTC
Read the original article Hit count: 345

Filed under:
|
|
|
|

The following code:

#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <aio.h>
#include <errno.h>

int main (int argc, char const *argv[])
{
  char name[] = "abc";
  int fdes;
  if ((fdes = open(name, O_RDWR | O_CREAT, 0600 )) < 0)
    printf("%d, create file", errno);

  int buffer[] = {0, 1, 2, 3, 4, 5};
  if (write(fdes, &buffer, sizeof(buffer)) == 0){
    printf("writerr\n");
  }

  struct aiocb aio;
  int n = 2;
  while (n--){
    aio.aio_reqprio = 0;
    aio.aio_fildes = fdes;
    aio.aio_offset = sizeof(int);
    aio.aio_sigevent.sigev_notify = SIGEV_NONE; 

    int buffer2;
    aio.aio_buf = &buffer2;
    aio.aio_nbytes = sizeof(buffer2);

    if (aio_read(&aio) != 0){
      printf("%d, readerr\n", errno);
    }else{
      const struct aiocb *aio_l[] = {&aio};
      if (aio_suspend(aio_l, 1, 0) != 0){
         printf("%d, suspenderr\n", errno);
      }else{
        printf("%d\n", *(int *)aio.aio_buf);
      }
    }
  }

  return 0;
}

Works fine on Linux (Ubuntu 9.10, compiled with -lrt), printing

1
1

But fails on OS X (10.6.6 and 10.6.5, I've tested it on two machines):

1
35, readerr

Is this possible that this is due to some library error on OS X, or am I doing something wrong?

© Stack Overflow or respective owner

Related posts about c

    Related posts about linux