programar programa ejecutar desde compilar compilador como c linux hard-drive

ejecutar - Acceso directo al disco duro sin FS desde el programa C en Linux



gcc linux (3)

Quiero acceder a todo el disco duro directamente desde un programa en C. No hay FS en eso y nunca lo será.

Solo quiero abrir / dev / sda (por ejemplo) y hacer E / S a nivel de bloque / sector del disco.

Planeo escribir algunos programas para aprender programación en C en el entorno Linux (conozco el lenguaje C, Python, Perl y Java) pero no confío en el entorno Linux.

Para mis propósitos de aprendizaje, estoy pensando en jugar con kyoto-cabinet y guardar el valor correspondiente al hash calculado directamente en un "bloque / sector" del disco duro, registrando el par: "hash, bloque / sector de referencia" en una archivo de base de datos hash kyoto-cabinet.

No sé si esto es factible utilizando funciones estándar de CI / O o de lo contrario tendría que escribir un "controlador de dispositivo" o algo así como ...


Como los archivos de dispositivo para unidades (por ejemplo, /dev/sda ) son dispositivos de bloque, esto significa que puede abrir, buscar y usar el archivo casi como un archivo normal.


Sí, como han dicho otros, simplemente puede abrir el dispositivo de bloqueo.

Sin embargo, es una muy buena idea hacer IO (escribe de todos modos) en límites de bloque y bloques completos. Puede usar algo como pread () y pwrite () para hacer estos IO, o mmap algunos o todos los dispositivos.

Hay un montón de ioctls que pueden usarse, consulte "man sd" para obtener más información. No parecen estar todos documentados en el mismo lugar.

En linux / fs.h se definen BLKROSET y un montón de otros ioctls, hay que mirar alrededor para descubrir cómo usarlos. Puede hacer cosas útiles, como averiguar qué tan grande es el dispositivo y cuál es el tamaño del bloque.

El código fuente del paquete util-linux-ng es tu amigo, contiene ejemplos.


Como se mencionó en otra parte, bajo los sistemas * NIX, se puede acceder a los dispositivos de bloque como /dev/sda como archivos simples. Tenga en cuenta que si el sistema de archivos se monta desde el dispositivo, abrirlo como archivo de escritura fallará.

Si desea jugar con dispositivos de bloque, le aconsejaría utilizar primero el loop device , que presenta un archivo plano como un dispositivo de bloque. Por ejemplo:

dd if=/dev/zero of=./loop_file_10MB bs=1024 count=10K losetup /dev/loop0 $PWD/loop_file_10MB

Después de eso, /dev/loop0 se comportaría como si fuera un dispositivo de bloque, pero toda la información escrita se almacenaría en el archivo.