SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: jaumegs en Miércoles 18 de Enero de 2006, 00:02

Título: Manejo Del Dico Flexible En C
Publicado por: jaumegs en Miércoles 18 de Enero de 2006, 00:02
Que libreria incluye funciones para leer y escribir el disco flexible sector por sector?, es decir, especificando cara, pista y siector.

P.D.- Para dev-c++ o borland cpp compiler 5.

SALUDOS
Título: Re: Manejo Del Dico Flexible En C
Publicado por: Eternal Idol en Miércoles 18 de Enero de 2006, 08:31
Ninguna conocida y para hacer eso (ya que supongo lo querras hacer directamente) en Windows necesitas un driver de modo kernel, las instrucciones in y out estan protegidas.
Título: Re: Manejo Del Dico Flexible En C
Publicado por: seni en Viernes 19 de Enero de 2007, 18:45
Se hace de la siguiente forma.

// abrimos la disquetera como si de un archivo se tratara.
hDevice = CreateFile("\\\\.\\A:", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
// en este caso la he abierto solo para escribir, si quieres leer pon un flag más y ya esta, mira en msdn. leer

// preparamos la posición a escribir se utiliza un entero de 64 bits, por lo tanto tengo que convertir
__int64 posicion = sector * bytesSector; // bytes por sector suelen ser 512, pero se puede averiguqar con el api.
LARGE_INTEGER liNewPos;
liNewPos.QuadPart = posicion;


if (hDevice != INVALID_HANDLE_VALUE)
{
   // nos posicionamos
   if(liNewPos.u.HighPart == 0)
      dw = SetFilePointer(hDevice, liNewPos.u.LowPart, NULL,FILE_BEGIN);
   else
      dw = SetFilePointer(hDevice, liNewPos.u.LowPart, &liNewPos.u.HighPart,FILE_BEGIN);
         
   if (dw != INVALID_SET_FILE_POINTER && GetLastError() == NO_ERROR)
   {
      b = WriteFile(hDevice, sbuffer0, bytesSector, &dw, NULL);
   else
      b = WriteFile(hDevice, sbuffer + (posRand*bytesSector), bytesSector, &dw, NULL);
   
      if(b == FALSE || dw != bytesSector)
      {
         printf("Error escribiendo en el sector %d", sector);   
         delete sbuffer;
         delete sbuffer0;
         CloseHandle(hDevice);
         return 0;
      }
   }
   else
   {
      printf("Error posicionandome en el sector %d", sector);   
      delete sbuffer;
      delete sbuffer0;
      CloseHandle(hDevice);
      return 0;
   }
         
        CloseHandle(hDevice);
}

// ya lo tienes
Título: Re: Manejo Del Dico Flexible En C
Publicado por: Eternal Idol en Viernes 19 de Enero de 2007, 18:50
Si y no, es por sectores pero no por caras y pistas como pedia y se hacia en MS-DOS.

PD. Pone el codigo entre etiquetas CODE (entre corchetes) y esta pregunta es de hace mas de un año.
Título: Re: Manejo Del Dico Flexible En C
Publicado por: seni en Lunes 22 de Enero de 2007, 08:58
Lo sabia, pero lo he puesto por si alguien que lo lea le sirva.

Por cierto, aprovechando el momento. Como puedo hacer eso mismo en linux, alguno de vosotros lo ha echo.

Cuales son las librerias a utilizar.

Muchas gracias