📄 mdwrite.c
字号:
/* mdwrite --- write a recognizable, predictable pattern on a block device */# include <sys/types.h># include <sys/stat.h># include <fcntl.h># include <unistd.h># include <stdio.h># include <stdlib.h># include <errno.h># include <string.h># define BLOCK_SIZE (32*1024)# define LONGS_PER_BLOCK (BLOCK_SIZE / sizeof (long))char *progname = "mdwrite";static long get_size (char *devname);main (int argc, char **argv){ int buf[LONGS_PER_BLOCK]; int i, fd; long nblocks; char *devname; if (argc != 2) { fprintf (stderr, "Usage: %s <device>\n", progname); exit (1); } devname = argv[1]; fd = open (devname, O_RDWR); if (fd < 0) { fprintf (stderr, "%s: can't open %s (%s)\n", progname, devname, strerror (errno)); exit (2); } nblocks = get_size (devname); if (nblocks <= 0) { fprintf (stderr, "%s: device has zero blocks; raidstart needed?\n", progname); exit (3); } for (i = 0; i < nblocks; i++) { int k; for (k = 0; k < LONGS_PER_BLOCK; k++) buf[k] = i; if (write (fd, (char *) buf, sizeof (buf)) < 0) { fprintf (stderr, "%s: write failed (%s)\n", progname, strerror (errno)); abort (); } } close (fd); exit (0);}/* get_size --- return the size of fd in blocks */static longget_size (char *devname){ int fd; long nbytes; /* stat on a block device returns zero (Duh!), so we must open it, ** and lseek to the end. However, lseek also turns off read-ahead ** which we definatly want, so we open the device a 2nd time to ** avoid that. */ fd = open (devname, O_RDONLY); if (fd < 0) { fprintf (stderr, "%s (get_size): can't open %s for reading (%s)\n", progname, devname, strerror (errno)); exit (3); } nbytes = lseek (fd, 0L, SEEK_END); if (nbytes < 0) { fprintf (stderr, "%s (get_size): lseek failed (%s)\n", progname, strerror (errno)); exit (4); } close (fd); return (nbytes / BLOCK_SIZE);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -