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

📄 c.c

📁 查看磁盘分区信息的C语言源程序!
💻 C
字号:
#include <stdio.h>
#include <dos.h>
#include <bios.h>

struct direct {
	char	name[10];
	unsigned char mode;
	char	reserved[10];
	struct	stamp {
			unsigned int	mtime;
			unsigned int	mdate;
	} stamp;
	unsigned int	first;
	unsigned long	fsize;
};

struct param {
	short int	sysid[9];
	int    bytes_sector;
	short int	sectors_cluster;
	int    sectors_reserved;
	short int	total_fats;
	unsigned int   root_entries;
	int    total_sectors;
	short int	media_descriptor;
	int    sectors_fat;
	int    sectors_track;
	int    number_heads;
	int    hidden_sectors;
};

struct param *bbp();
main(argc,argv)
int argc;
char **argv;
{
	int i, j, retry, strt;

	unsigned ch, status = 0;
	char	buf[512];
	void	far *pbuf;
	struct diskinfo_t info;
	struct direct *d;
	struct param  *p;

	memset(buf,'\0', sizeof (buf));
    pbuf = (void far *)(&buf[0]);

    info.buffer = pbuf;
	info.drive = (argc > 1) ? atoi(argv[1]) : 0;
	info.head = 0;
	info.track = 0;
	info.sector = 1;
	info.nsectors = 1;

	for (retry = 0; retry <= 3; retry++) {
		if ((status = _bios_disk(_DISK_READ, &info)) == info.nsectors) {
			printf("read OK: sizeof direct=%d\n", sizeof (struct direct));
			printf("read OK: sizeof params=%d\n", sizeof (struct param));
/*
            d = (struct direct *)buf;
            for (i = 0; i < 10; i++) {
				printf("[%11.11s] first=%x size=%d\n", d->name, d->first, d->fsize);
				++d;
			}
*/
			p = (struct param *)bbp(pbuf);
printf("           sysid=%8.8s\n", p->sysid);
printf("    bytes_sector=%d\n", p->bytes_sector);
printf(" sectors_cluster=%d\n", p->sectors_cluster);
printf("sectors_reserved=%d\n", p->sectors_reserved);
printf("      total_fats=%d\n", p->total_fats);
printf("    root_entries=%u\n", p->root_entries);
printf("   total_sectors=%d\n", p->total_sectors);
printf("media_descriptor=%x\n", p->media_descriptor);
printf("     sectors_fat=%d\n", p->sectors_fat);
printf("   sectors_track=%d\n", p->sectors_track);
printf("    number_heads=%d\n", p->number_heads);
printf("  hidden_sectors=%d\n", p->hidden_sectors);
			exit(0);
		}
	}
}


struct param *
bbp(p)
char far *p;
{
	static struct param d;

	strncpy(d.sysid,&p[0x3],8);

	d.bytes_sector =			  (int )p[0xb];
	d.sectors_cluster = 	(short int )p[0xd];
	d.sectors_reserved =		  (int )p[0xe];
	d.total_fats =			(short int )p[0x10];
	d.root_entries =		(unsigned int)p[0x11];
	d.total_sectors =			  (int )p[0x13];
	d.media_descriptor =	(short int )p[0x15];
	d.sectors_fat = 			  (int )p[0x16];
	d.sectors_track =			  (int )p[0x18];
	d.number_heads =			  (int )p[0x1a];
	d.hidden_sectors =			  (int )p[0x1c];

	return (&d);
}

⌨️ 快捷键说明

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