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

📄 partitiontype.c

📁 Util-linux 软件包包含许多工具。其中比较重要的是加载、卸载、格式化、分区和管理硬盘驱动器
💻 C
字号:
/* * partitiontype.c, aeb, 2001-09-10 * * call: partitiontype device * * either exit(1), or exit(0) with a single line of output * DOS: sector 0 has a DOS signature. */#include <stdio.h>#include <fcntl.h>struct aix_label {	unsigned int   magic;	/* more ... */};#define	AIX_LABEL_MAGIC		0xc9c2d4c1#define	AIX_LABEL_MAGIC_SWAPPED	0xc1d4c2c9struct bsd_label {	unsigned int   magic;	unsigned char  stuff[128];	unsigned int   magic2;	/* more ... */};#define BSD_LABEL_MAGIC         0x82564557struct sgi_label {	unsigned int   magic;	/* more ... */};#define	SGI_LABEL_MAGIC		0x0be5a941#define	SGI_LABEL_MAGIC_SWAPPED	0x41a9e50bstruct sun_label {	unsigned char stuff[508];	unsigned short magic;      /* Magic number */	unsigned short csum;       /* Label xor'd checksum */};#define SUN_LABEL_MAGIC          0xDABE#define SUN_LABEL_MAGIC_SWAPPED  0xBEDAintmain(int argc, char **argv) {	int fd, n;	unsigned char buf[1024];	struct aix_label *paix;	struct bsd_label *pbsd;	struct sgi_label *psgi;	struct sun_label *psun;	if (argc != 2) {		fprintf(stderr, "call: %s device\n", argv[0]);		exit(1);	}	fd = open(argv[1], O_RDONLY);	if (fd == -1) {		perror(argv[1]);		fprintf(stderr, "%s: cannot open device %s\n",			argv[0], argv[1]);		exit(1);	}	n = read(fd, buf, sizeof(buf));	if (n != sizeof(buf)) {		if (n == -1)			perror(argv[1]);		fprintf(stderr, "%s: cannot read device %s\n",			argv[0], argv[1]);		exit(1);	}	psun = (struct sun_label *)(&buf);	if (psun->magic == SUN_LABEL_MAGIC ||	    psun->magic == SUN_LABEL_MAGIC_SWAPPED) {		unsigned short csum = 0, *p;		int i;		for (p = (unsigned short *)(&buf);		     p < (unsigned short *)(&buf[512]); p++)			csum ^= *p;		if (csum == 0) {			printf("SUN\n");			exit(0);		}	}	pbsd = (struct bsd_label *)(&buf[512]);	if (pbsd->magic == BSD_LABEL_MAGIC &&	    pbsd->magic2 == BSD_LABEL_MAGIC) {		printf("BSD\n");		exit(0);	}	pbsd = (struct bsd_label *)(&buf[64]);	if (pbsd->magic == BSD_LABEL_MAGIC &&	    pbsd->magic2 == BSD_LABEL_MAGIC) {		printf("BSD\n");		exit(0);	}	paix = (struct aix_label *)(&buf);	if (paix->magic == AIX_LABEL_MAGIC ||	    paix->magic == AIX_LABEL_MAGIC_SWAPPED) {		printf("AIX\n");		exit(0);	}	psgi = (struct sgi_label *)(&buf);	if (psgi->magic == SGI_LABEL_MAGIC ||	    psgi->magic == SGI_LABEL_MAGIC_SWAPPED) {		printf("SGI\n");		exit(0);	}	if (buf[510] == 0x55 && buf[511] == 0xaa) {		printf("DOS\n");		exit(0);	}#if 0	fprintf(stderr, "%s: do not recognize any label on %s\n",		argv[0], argv[1]);#endif	exit(1);		/* unknown */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -