GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo realizo E/S de bajo nivel en un archivo de dispositivo Linux en Python?

Agrega un os.lseek() para buscar de nuevo al principio de la cadena que escribió. Actualmente escribiste 16 bytes que avanzaron el puntero. Cuando lee, comienza a leer en el puntero actual, por lo que debe retroceder hasta el comienzo de lo que escribió.

Esto funcionó para mí:

#!/usr/bin/python
import os

data = "xxxxxxxxxxxxxxxx"
dev = os.open("/dev/sdp1", os.O_RDWR)
os.write(dev,data)
os.lseek(dev,0,os.SEEK_SET)
print os.read(dev,16)

Según el os.write documentación:

Nota: Esta función está diseñada para E/S de bajo nivel y debe aplicarse a un descriptor de archivo como lo devuelve os.open() o pipe() . Para escribir un "objeto de archivo" devuelto por la función integrada open() o por popen() o fdopen() o sys.stdout o sys.stderr , usa su write() método.

No deberías estar mezclando y combinando aquí. Si usa la función global open() para abrir un archivo, solo debe usar el read() del objeto de archivo y write() métodos. Por el contrario, si usa os.open() para abrir un archivo, solo debe usar os.read() y os.write() .

Entonces, intente reemplazar su llamada a open() con os.open(); o mantenga el open() llame y reemplace os.write(dev, ...) con dev.write(...) y reemplaza os.read(dev, ...) con dev.read(...) .


Linux
  1. ¿Cómo purgar cachés de E/S de disco en Linux?

  2. Cómo ejecutar el archivo python en linux

  3. Cómo detectar la pulsación de tecla en un terminal Linux, estilo de bajo nivel en python

  4. ¿Cómo montar un dispositivo en Linux?

  5. Linux:diferencia entre /dev/console, /dev/tty y /dev/tty0

Cómo instalar Python en Linux

Cómo mover un archivo en Linux

Aprenda los conceptos básicos de cómo funciona la redirección de E/S (entrada/salida) de Linux

Cómo crear un archivo en Linux

Cómo vincular un archivo en Linux

Cómo agregar un nuevo dispositivo al sistema de archivos BTRFS en Linux