how to get usb's urb info in linux
===

I'm try to get usb stick's urb info. And I write like follows:

    #include <sys/ioctl.h>
    #include <errno.h>
    #include <fcntl.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <usb.h>
    /* #include <stropts.h> */
    /* #include <inttypes.h> */
    #include <linux/usbdevice_fs.h>
    /* #include <asm/byteorder.h> */
    /* #include <linux/usb/ch9.h> */
    #define USBDEVFS_REAPURB           _IOW('U', 12, void *)
    int main(int argc, char *argv[])
    { 
      int fd;
      int result;
      int i;
      struct usbdevfs_urb * receive;
      receive = malloc(sizeof (struct usbdevfs_urb));
    
      bzero(receive, sizeof (struct usbdevfs_urb));

      char file[30];
      strncpy (file, argv[1], 30);
      
      if ((fd = open(file, O_RDWR)) < 0)
        {
          printf("failed to open device: %s, \n error: %s \n", file, strerror(errno));
        }
      else 
        {
          printf ("Open successed: Device: %s\n", file);
          for (i = 0; i < 1000; ++i)
            {
              printf ("polling...\n");
              result = ioctl(fd, USBDEVFS_REAPURB, receive);
                if (result < 0)
                  {
                    printf ("Error!  : ioctl returned : %d\n errno =%s\n", result, strerror(errno));
                    break;
                  }
              printf ("The %d th time ok.\n", i + 1);
              usleep(2000);
            }
        }
      close(fd);
      return 0;
    }

I can compile it. But when I run it  it said that Invalid argument. 
So, what's wrong with me? 