#include #include #include #include #include #include #include #include "linux/nvme.h" int main(void) { struct nvme_smart_log smart_log; struct nvme_admin_cmd cmd; unsigned int data_len = sizeof(smart_log); unsigned int dw10 = 0x2 | (((sizeof(smart_log) / 4) - 1) << 16); unsigned int nsid = 0xffffffff; memset(&cmd, 0, sizeof(cmd)); cmd.opcode = nvme_admin_get_log_page; cmd.addr = (__u64)((unsigned long)&smart_log); cmd.data_len = data_len; cmd.cdw10 = dw10; cmd.nsid = nsid; int fd = open("/dev/nvme0n1", O_RDONLY); ioctl(fd, NVME_IOCTL_ADMIN_CMD, &cmd); return 0; }