GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie führe ich Low-Level-E/A für eine Linux-Gerätedatei in Python durch?

Fügen Sie ein os.lseek() hinzu um zum Anfang der von Ihnen geschriebenen Zeichenfolge zurückzusuchen. Derzeit haben Sie 16 Bytes geschrieben, die den Zeiger vorrücken. Wenn Sie lesen, beginnen Sie mit dem Lesen am aktuellen Zeiger, also müssen Sie ihn bis zum Anfang des Geschriebenen zurücksetzen.

Das hat bei mir funktioniert:

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

Gemäß os.write Dokumentation:

Hinweis: Diese Funktion ist für Low-Level-E/A gedacht und muss auf einen Dateideskriptor angewendet werden, wie er von os.open() zurückgegeben wird oder pipe() . Um ein „Dateiobjekt“ zu schreiben, das von der eingebauten Funktion open() zurückgegeben wird oder per popen() oder fdopen() , oder sys.stdout oder sys.stderr , verwenden Sie dessen write() Methode.

Sie sollten hier nicht mischen und anpassen. Wenn Sie die globale Funktion open() verwenden Um eine Datei zu öffnen, müssen Sie nur den read() des Dateiobjekts verwenden und write() Methoden. Umgekehrt, wenn Sie os.open() verwenden Um eine Datei zu öffnen, müssen Sie nur os.read() verwenden und os.write() .

Versuchen Sie also, Ihren Aufruf durch open() zu ersetzen mit os.open(); oder behalten Sie open() bei aufrufen und os.write(dev, ...) ersetzen mit dev.write(...) und ersetzen Sie os.read(dev, ...) mit dev.read(...) .


Linux
  1. Linux – Bestimmung einer bestimmten Datei, die für hohe E/A verantwortlich ist?

  2. Linux – Warum sind „/dev/ptmx“ und „/dev/pts/ptmx“ keine Gerätedateien?

  3. Wie führen Sie nicht blockierende Konsolen-E/A unter Linux in C durch?

  4. Wie stoppe ich einen „unterbrechungsfreien“ Prozess unter Linux?

  5. Wie lösche ich Festplatten-E/A-Caches unter Linux?

So verschieben Sie eine Datei unter Linux

So erstellen Sie eine Datei unter Linux

So verknüpfen Sie eine Datei unter Linux per Symlink

So fügen Sie unter Linux ein neues Gerät zum BTRFS-Dateisystem hinzu

Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0

Spezielle Datei, die E/A-Fehler verursacht