#include #include #include #include #include #include #include #include static void diocturtest(const char *name); int main(void) { static const char mib_name[] = "hw.disknames"; size_t len; char *disknames; char *last; char *name; if (sysctlbyname(mib_name, NULL, &len, NULL, 0) == -1) err(1, "sysctlbyname"); if ((disknames = malloc(len + 2)) == 0) err(1, "malloc"); (void)sysctlbyname(mib_name, disknames, &len, NULL, 0); for ((name = strtok_r(disknames, " ", &last)); name; (name = strtok_r(NULL, " ", &last))) { diocturtest(name); } free(disknames); return 1; } static void diocturtest(const char *name) { char dname[16]; int fd; int error; int ready; sprintf(dname, "/dev/r%s%c", name, 'a'+RAW_PART); printf("%s:", dname); fd = open(dname, O_RDONLY, 0); if (fd == -1) { puts(" open failed"); return; } error = ioctl(fd, DIOCTUR, &ready); printf(" ready %d error:%d\n", ready, error); close(fd); return; }