📄 rf_status.c
字号:
/* * rf_status.c *//* * Jim Zelenka, CMU/SCS, 2 May 1996 * * Get status of an array, and its disks */#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include "rf_types.h"#include "rf_raid.h"#include "rf_disks.h"#include "rf_raidframe.h"char *progname;char *devname = "/dev/rraidframe_c";static void usage(){ fprintf(stderr, "USAGE: %s [device_name]\n", progname); fflush(stderr); exit(1);}#define CASESTR(_c_) case rf_ds_##_c_ : strcpy(str,#_c_); break;static char *statusstr(status) RF_DiskStatus_t status;{ static char str[512]; switch(status) { CASESTR(optimal); CASESTR(failed); CASESTR(reconstructing); CASESTR(dist_spared); CASESTR(spared); CASESTR(spare); CASESTR(used_spare); default: sprintf(str, "Unknown status %d", (int)status); } return(str);}static void show_disk(dp) RF_RaidDisk_t *dp;{ printf("%20s: %s\n", dp->devname, statusstr(dp->status));}static void show_spare(dp) RF_RaidDisk_t *dp;{ printf("%20s [%d][%d]: %s\n", dp->devname, dp->spareRow, dp->spareCol, statusstr(dp->status));}main(argc, argv) int argc; char **argv;{ RF_DeviceConfig_t rfcfg, *cfg; int fd, rc, i, j; progname = argv[0]; if (argc > 1) { if (argc != 2) usage(); devname = argv[1]; } fd = open(devname, O_RDWR); if (fd < 0) { perror(devname); exit(1); } cfg = &rfcfg; rc = ioctl(fd, RAIDFRAME_GET_INFO, &cfg); if (rc) { perror("RAIDFRAME_GET_INFO"); exit(1); } printf("Devices:\n"); for(i=0;i<rfcfg.ndevs;i++) { show_disk(&rfcfg.devs[i]); } if (rfcfg.nspares > 0) { printf("Spares:\n"); for(i=0;i<rfcfg.nspares;i++) { show_spare(&rfcfg.spares[i]); } } exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -