SIOC_MODE_SENSE_PAGE and SIOC_MODE_SENSE

This IOCTL command returns a mode sense page from the device. The desired page is selected by specifying the page_code in the mode_sense_page structure. See the appropriate device manual to determine the supported mode pages and content.

The data structures are
struct mode_sense_page {
        unchar page_code;
        char data[MAX_MDSNS_LEN];
};

struct mode_sense {
        unchar page_code;
        unchar subpage_code;
        unchar reserved[6];
        unchar cmd_code;
        char data[MAX_MDSNS_LEN];
};
The IOCTLs are identical, except that if a specific subpage is desired, mode_sense must be used and subpage_code must be assigned by the user application. Under the current implementation, cmd_code is not assigned by the user and must be left with a value 0.
An example of the SIOC_MODE_SENSE_PAGE command is
#include <sys/IBM_tape.h>
struct mode_sense_page mode_page;
/* get medium changer mode */
mode_page.page_code = 0x20;
if (!ioctl (fd, SIOC_MODE_SENSE_PAGE, &mode_page)) {
   printf ("The SIOC_MODE_SENSE_PAGE ioctl succeeded\n");
   if (mode_page.data[2] == 0x02)
      printf ("The library is in Random mode.\n");
   else if (mode_page.data[2] == 0x05)
      printf ("The library is in Automatic (Sequential) mode.\n");
}
else {
   perror ("The SIOC_MODE_SENSE_PAGE ioctl failed");
   sioc_request_sense();
}