Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Вопросы начинающих программистов
Перезагрузить страницу Сколько стоит программа для вывода информации о жестком диске
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
kadabra kadabra вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.06.2005
По умолчанию Сколько стоит программа для вывода информации о жестком диске - 04.06.2005, 14:15

Сколько будет стоить программа вывода информации о жестком диске, написанная под ДОС на Си 3.1
Инфа: - о MBR
- всех логических дисках
- и вообще все что можно еще вывести...

С комментариями и нормальным пользовательским интерфейсом.
Нужно очень СРОЧНО.
Ответить с цитированием
  (#2 (permalink)) Старый
Fuud Fuud вне форума
Member
 
Сообщений: 4,076
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.09.2004
По умолчанию 05.06.2005, 21:16

Смотрите личные сообщения
Ответить с цитированием
  (#3 (permalink)) Старый
Fuud Fuud вне форума
Member
 
Сообщений: 4,076
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.09.2004
По умолчанию 15.06.2005, 17:02

С разрешения kadabra, публикую исходник:
Код:
/* Standart headers */
#include <stdlib.h>
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <ctype.h>

/* Type of data */

#define byte unsigned char
#define word unsigned int
#define dword unsigned long
long END_DISK=0;
void read_MBR(void);    /* Reading MBR */
/* Getting from packed SecTrk # sector */
#define SECT(x) x&0x3f
/* Getting from packed SecTrk # track */
#define TRK(x) (x>>8)|((x<<2)&0x300)

  /* the structure of element of partition */
  struct Part {
    byte ActFlag;          /* sign of active partition */
      /* physical adress of beginning of partition*/
    byte Begin_Hd;                         /* # heads */
    word Begin_SecTrk;           /* # sectors and tracks */
    byte SysCode;                        /* code of the system */
       /* physical adress of end of partition */
    byte End_Hd;                           /* # heads */
    word End_SecTrk;             /* # sectors and tracks */
    dword RelSec;                  /* # sectors */
    dword Size;                  /* the count of the sectors */
    };
    //the MBR structure
  struct MBR {
    char LoadCode[0x1be];   /* program of boot */
    struct Part rt[4];      /* 4 elements of partition */
    word EndFlag;           /* signature of MBR */
    } mbr;
  /* additional variables */
  int x=10,y;      /* the screen's coordinates */
  byte head=0;     /* the number of heads (0) */
  word Sect_Trk=1; /* the number of track and sector(0,1) */
  int ndrive=0;    /* the number of logical disk */
  word *EndList;   /* the pointer of signature */
  union REGS rr;
  struct SREGS sr;
  word i;
  long disk1=0x80;
/*--------------------------------------------------------*/
char c=0;
main()
{
  int hdr=1;
  textbackground(0);
  clrscr();
  gotoxy(1,1);
  textcolor(9);
  cprintf("            Master Boot Record");

  gotoxy(30,4);

  gotoxy(1,3);

  textcolor(15);
  cprintf("log.disk ______ nr");
  textcolor(14);
  cprintf("Sign __________ nr");
  textcolor(15);
  cprintf("System code ___ nr");
  textcolor(14);
  cprintf("Begin: heads___ nr");
  textcolor(15);
  cprintf("      tracks___ nr");
  textcolor(14);
  cprintf("       sector__ nr");
  textcolor(15);
  cprintf("End:  heads---> nr");
  textcolor(14);
  cprintf("      tracks -> nr");
  textcolor(15);
  cprintf("        sect.-> nr");
  textcolor(14);
  cprintf("Begin sect ---> nr");
  textcolor(15);
  cprintf("Size ---------> nr");
  textcolor(11);
while (END_DISK==0) //Look through hard drives
{
  gotoxy(x+12,2);
  cprintf("h. drive %d",hdr);
  hdr++;

NEXT:
  read_MBR();
  if (END_DISK==1) goto ENDP;
  for (EndList=(word *)&mbr.rt[(i=0)];        //look through partitions of
   (*EndList!=0xaa55)&&(mbr.rt[i].Size>0L);//            hard drive
   EndList=(word *)&mbr.rt[++i])
  {
    /* cursor coordinate */
    y=3;
    x+=12;
    gotoxy(x,y++);
    if (mbr.rt[i].SysCode==5)
  {

   cprintf("Ext    ");

  }
    else
    textcolor(15);
    cprintf("%-7c",'C'+ndrive++);

    gotoxy(x,y++);textcolor(14);
    cprintf("%02xH       ",mbr.rt[i].ActFlag);
    gotoxy(x,y++);  textcolor(15);
    cprintf("%-7d",mbr.rt[i].SysCode);
    gotoxy(x,y++);  textcolor(14);
    cprintf("%-7d",mbr.rt[i].Begin_Hd);
    gotoxy(x,y++);  textcolor(15);
    cprintf("%-7u",TRK(mbr.rt[i].Begin_SecTrk));
    gotoxy(x,y++);  textcolor(14);
    cprintf("%-7u",SECT(mbr.rt[i].Begin_SecTrk));
    gotoxy(x,y++);  textcolor(15);
    cprintf("%-7d",mbr.rt[i].End_Hd);
    gotoxy(x,y++);  textcolor(14);
    cprintf("%-7u",TRK(mbr.rt[i].End_SecTrk));
    gotoxy(x,y++);  textcolor(15);
    cprintf("%-7u",SECT(mbr.rt[i].End_SecTrk));
    gotoxy(x,y++);  textcolor(14);
    cprintf("%-7lu",mbr.rt[i].RelSec);
    gotoxy(x,y++);  textcolor(15);
    cprintf("%-7lu",mbr.rt[i].Size);
    if (mbr.rt[i].SysCode==5)
    {
    /* if the system code is 5, partition have own table of partitions;
  program defines its disk adress and new table load to memory
    */
   head=mbr.rt[i].Begin_Hd;
   Sect_Trk=mbr.rt[i].Begin_SecTrk;
   goto NEXT;
    }
  }
  gotoxy(x,y++);
  gotoxy(29,18);
  disk1++;

}
  ENDP:
  gotoxy(x+12,2);
  cprintf("            ");
 diskfree_t df;
 long m=0;
  VZVR:
  textcolor(2);
  gotoxy(2,14);
  cprintf("Press the letter of the disk that you want to see about or <Enter> to exit...");
  c=getche();
  if (c==13) exit(1);
  if (_dos_getdiskfree(toupper(c)-'A'+1,&df))
  {
  gotoxy(12,15);
  cprintf("Error when reading %c",c);
  goto VZVR;
  }
  else
  {
   textcolor(10);
   gotoxy(2,14);
   cprintf("                                                                                               ");
   gotoxy(12,15);
   cprintf("                                                             ");
   gotoxy(12,16);
   cprintf("information about disk %c                                   ",toupper(c));
   gotoxy(12,17);
   cprintf("Total clasters________ %u",df.total_clusters);
   gotoxy(12,18);
   cprintf("Avail clasters________ %u",df.avail_clusters);
   gotoxy(12,19);
   cprintf("Sectors per cluster___ %u",df.sectors_per_cluster);
   gotoxy(12,20);
   cprintf("Bytes per sector______ %u",df.bytes_per_sector);
   gotoxy(12,21);
   cprintf("-------------------------");
   gotoxy(12,22);
   cprintf("Total bytes on disk___ %lld",(long long)df.bytes_per_sector*(long long)
   df.sectors_per_cluster*(long long)df.total_clusters);
   gotoxy(12,23);
   cprintf("Avail bytes on disk___ %lld",(long long)df.bytes_per_sector*(long long)
   df.sectors_per_cluster*(long long)df.avail_clusters);

   gotoxy(12,24);
   cprintf("Press E to exit, press C to continue");
   c=0;
   while (c!='E'&& c!='e' && c!='C' && c!='c')
   {
    c=getch();
   }
   if (c=='E' || c=='e') exit(1); else
   {
   for(m=0;m<11;m++)
   {
    gotoxy(12,14+m);
    cprintf("                                                                ");

   }
   goto VZVR;
   }
  }
}

/*----------------------Reading MBR------------------------*/
void read_MBR(void)
{
    rr.h.ah=2;           /* Reading */
    rr.h.al=1;           /* Sector 1 */
    rr.h.dl=disk1;        /* Hard drive (begin with 0x80) */
    rr.h.dh=head;        /* Head */
    rr.x.cx=Sect_Trk;    /* track, sector */
    sr.es=FP_SEG(&mbr);  /* Adress of buffer in memory */
    rr.x.bx=FP_OFF(&mbr);
    int86x(0x13,&rr,&rr,&sr);//Use interrupt 0x13 to work with hard drive
    /* Checking the errors of reading */
    if (rr.x.cflag)
    {

  if (rr.x.cflag==1) END_DISK=1;
  else
  {
    printf("Error of reading: %x.  ",rr.h.ah);
    printf("Press any key...n7");
    getch();
    exit(1);
  }
    }
}
Ответить с цитированием
  (#4 (permalink)) Старый
imported_ViTYAi imported_ViTYAi вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.06.2005
По умолчанию 28.06.2005, 09:41

Можно гораздо проще замутить при помощи WinAPI !
Ответить с цитированием
  (#5 (permalink)) Старый
imported_ViTYAi imported_ViTYAi вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.06.2005
По умолчанию 28.06.2005, 09:44

Можно вывести:

1. Кол-во секторов
2. Кол-во кластеров
3. Скока места
4. Соттветственно скока занято и свободно
5. Какие буквы у дисков и сколько их
6. Тип диска (HDD, 3.5А, СD и т. д.)
7. Файловая система

Вроде всё... Если подумать и расшарить MSDN, то ещё кучу можно найти.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
yureckor yureckor вне форума
Member
 
Сообщений: 462
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.03.2004
По умолчанию 28.06.2005, 12:13

Особенно если прочитать задание
Цитата:
написанная под ДОС
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Bad-секторы на жестком диске. LilDen Любые вопросы от новичков 3 26.11.2011 21:02
Что может стучать в жестком диске? Александр101 Любые вопросы от новичков 14 14.07.2010 23:16
Почему на cd диске можно создать меньше подкаталогов чем на жестком диске? zabosoff Любые вопросы от новичков 5 03.03.2010 00:35
Пропало 27 Гб на жестком диске.... AvRack Операционная система Windows 4 11.02.2010 02:07
Как освободить место на жестком диске? vertyoznic Любые вопросы от новичков 2 21.01.2009 13:20
Как востановить MBR на жестком диске? Irk-Max3 Техническая поддержка 4 05.09.2008 07:25
Сколько места нужно на жестком диске для ОС Vista? ezir Любые вопросы от новичков 8 25.03.2008 06:33
Сколько по вашему стоит программа? Rockie Задания за деньги 9 17.10.2007 17:38



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов