SoloCodigo
Programación General => C/C++ => Mensaje iniciado 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
-
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.
-
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
-
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.
-
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