⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdwrite.c

📁 create raid tool at linux
💻 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 + -