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

📄 unixware.c

📁 Util-linux 软件包包含许多工具。其中比较重要的是加载、卸载、格式化、分区和管理硬盘驱动器
💻 C
字号:
#include <stdio.h>#include "partx.h"#define UNIXWARE_FS_UNUSED     0#define UNIXWARE_NUMSLICE      16#define UNIXWARE_DISKMAGIC     (0xCA5E600D)#define UNIXWARE_DISKMAGIC2    (0x600DDEEE)struct unixware_slice {	unsigned short s_label;		/* label */	unsigned short s_flags;		/* permission flags */	unsigned int   start_sect;	/* starting sector */	unsigned int   nr_sects;	/* number of sectors in slice */};struct unixware_disklabel {	unsigned int   d_type;		/* drive type */	unsigned char  d_magic[4];	/* the magic number */	unsigned int   d_version;	/* version number */	char    d_serial[12];	   	/* serial number of the device */	unsigned int   d_ncylinders;	/* # of data cylinders per device */	unsigned int   d_ntracks;	/* # of tracks per cylinder */	unsigned int   d_nsectors;	/* # of data sectors per track */	unsigned int   d_secsize;	/* # of bytes per sector */	unsigned int   d_part_start;	/* # of first sector of this partition */	unsigned int   d_unknown1[12];	/* ? */	unsigned int   d_alt_tbl;	/* byte offset of alternate table */	unsigned int   d_alt_len;	/* byte length of alternate table */	unsigned int   d_phys_cyl;	/* # of physical cylinders per device */	unsigned int   d_phys_trk;	/* # of physical tracks per cylinder */	unsigned int   d_phys_sec;	/* # of physical sectors per track */	unsigned int   d_phys_bytes;	/* # of physical bytes per sector */	unsigned int   d_unknown2;	/* ? */	unsigned int   d_unknown3;	/* ? */	unsigned int   d_pad[8];	/* pad */	struct unixware_vtoc {		unsigned char   v_magic[4];	/* the magic number */		unsigned int    v_version;	/* version number */		char    v_name[8];	      	/* volume name */		unsigned short  v_nslices;	/* # of slices */		unsigned short  v_unknown1;	/* ? */		unsigned int    v_reserved[10];	/* reserved */		struct unixware_slice		    v_slice[UNIXWARE_NUMSLICE]; /* slice headers */	} vtoc;};  /* 408 */intread_unixware_pt(int fd, struct slice all, struct slice *sp, int ns) {	struct unixware_disklabel *l;	struct unixware_slice *p;	unsigned int offset = all.start;	char *bp;	int n = 0;	bp = getblock(fd, offset+29); 	/* 1 sector suffices */	if (bp == NULL)		return -1;	l = (struct unixware_disklabel *) bp;	if (four2int(l->d_magic) != UNIXWARE_DISKMAGIC ||	    four2int(l->vtoc.v_magic) != UNIXWARE_DISKMAGIC2)		return -1;	p = &l->vtoc.v_slice[1];	/* slice 0 is the whole disk. */	while (p - &l->vtoc.v_slice[0] < UNIXWARE_NUMSLICE) {		if (p->s_label == UNIXWARE_FS_UNUSED)			/* nothing */;		else if (n < ns) {			sp[n].start = p->start_sect;			sp[n].size = p->nr_sects;			n++;		} else {			fprintf(stderr,				"unixware_partition: too many slices\n");			break;		}		p++;	}	return n;}

⌨️ 快捷键说明

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