• Jueves 14 de Noviembre de 2024, 04:11

Autor Tema:  Manejo Del Dico Flexible En C  (Leído 1639 veces)

jaumegs

  • Miembro MUY activo
  • ***
  • Mensajes: 110
    • Ver Perfil
Manejo Del Dico Flexible En C
« en: Miércoles 18 de Enero de 2006, 00:02 »
0
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

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Manejo Del Dico Flexible En C
« Respuesta #1 en: Miércoles 18 de Enero de 2006, 08:31 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

seni

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Manejo Del Dico Flexible En C
« Respuesta #2 en: Viernes 19 de Enero de 2007, 18:45 »
0
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

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Manejo Del Dico Flexible En C
« Respuesta #3 en: Viernes 19 de Enero de 2007, 18:50 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

seni

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Manejo Del Dico Flexible En C
« Respuesta #4 en: Lunes 22 de Enero de 2007, 08:58 »
0
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