GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguo I/O di basso livello su un file di dispositivo Linux in Python?

Aggiungi un os.lseek() per tornare all'inizio della stringa che hai scritto. Attualmente hai scritto 16 byte che hanno fatto avanzare il puntatore. Quando leggi, inizi a leggere dal puntatore corrente, quindi devi eseguire il backup fino all'inizio di ciò che hai scritto.

Questo ha funzionato per me:

#!/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)

Secondo il os.write documentazione:

Nota: Questa funzione è destinata all'I/O di basso livello e deve essere applicata a un descrittore di file come restituito da os.open() o pipe() . Per scrivere un "oggetto file" restituito dalla funzione integrata open() o per popen() o fdopen() o sys.stdout o sys.stderr , usa il suo write() metodo.

Non dovresti mescolare e abbinare qui. Se usi la funzione globale open() per aprire un file, devi usare solo il read() dell'oggetto file e write() metodi. Al contrario, se usi os.open() per aprire un file, devi usare solo os.read() e os.write() .

Quindi, prova a sostituire la tua chiamata al open() con os.open(); oppure, mantieni il open() chiama e sostituisci os.write(dev, ...) con dev.write(...) e sostituisci os.read(dev, ...) con dev.read(...) .


Linux
  1. Quanto sono portatili /dev/stdin, /dev/stdout e /dev/stderr?

  2. Come rinominare un file in Linux?

  3. Come si esegue l'I/O della console non bloccante su Linux in C?

  4. Come fermare il processo "ininterrotto" su Linux?

  5. Come rendere il mio modulo Python disponibile a livello di sistema su Linux?

Come spostare un file in Linux

Impara le nozioni di base su come funziona il reindirizzamento I/O (Input/Output) di Linux

Come creare un file in Linux

Come collegare simbolicamente un file in Linux

Come aggiungere un nuovo dispositivo al file system BTRFS in Linux

Come rilevare la pressione dei tasti su un terminale Linux, stile di basso livello in Python