📄 inquiry.c
字号:
#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <scsi/all.h>char *prg;char *types[] = { "direct access", "sequential access", "printer", "processor", "write once", "cdrom", "scanner", "optical memory", "medium changer", "communication", "graphics arts pre-press (0x0a)", "graphics arts pre-press (0x0b)", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "reserved", "unknown"};intmain(int argc, char **argv){ SCSI *fd; int i; struct sc_inquiry page; prg = argv[0]; if (argc != 2) { fprintf(stderr, "usage: %s device\n", prg); exit(1); } if ((fd=sc_open(argv[1])) == NULL) { fprintf(stderr, "%s: can't open device %s: %s\n", prg, argv[1], strerror(errno)); exit(1); } if (sc_inquiry(fd, &page) < 0) { sc_fstatus(fd, stderr, prg, "inquiry", 3); sc_close(fd); exit(1); } printf("Type: %s", types[page.type]); if (page.type_qual) printf(" (qualifier %02x", page.type_qual); if (page.type_mod) printf("%smodifier %d", (page.type_qual ? ", " : " ("), page.type_mod); if (page.type_qual || page.type_mod) printf(")"); printf("\n"); printf("Vendor: %s\n", page.vendor); printf("Product: %s\n", page.product); printf("Revision: %s\n", page.revision); printf("Conforms: "); if (page.iso_ver) printf("iso-%d ", page.iso_ver); if (page.ecma_ver) printf("ecma-%d ", page.ecma_ver); if (page.ansi_ver) printf("ansi-%d", page.ansi_ver); if (!page.iso_ver && !page.ecma_ver && !page.ansi_ver) printf("none"); printf("\n");#define FLAG(f) (page.f ? #f " " : "") printf("Flags: %s%s%s%s%s%s%s%s%s%s\n", (page.removable ? "rmb " : ""), FLAG(aenc), FLAG(trmiop), FLAG(reladr), FLAG(wbus32), FLAG(wbus16), FLAG(sync), FLAG(linked), FLAG(cmdque), FLAG(sftre)); if (page.vlen1 || page.vlen2) { printf("Vendor specific:\n\t"); if (page.vlen1) disp_hex(page.vspec1, page.vlen1); if (page.vlen2) { if (page.vlen1) printf("\n\t"); disp_hex(page.vspec2, page.vlen2); } } sc_close(fd); exit(0);}intdisp_hex(unsigned char *hex, int len){ int i; for (i=0; i<len; i++) { printf("%02x ", hex[i]); if (i%16 == 15 && i<len-1) printf("\n\t"); } printf("\n"); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -