Wie lese/schreibe ich ein Blockgerät? Ich hörte ich lesen/schreiben wie eine normale Datei, damit ich Setup ein Loop-Gerät vonWie lese/schreibe ich ein Blockgerät?
tunsudo losetup /dev/loop4 ~/file
Dann lief ich die App auf die Datei dann auf die Loop-Gerät
sudo ./a.out file
sudo ./a.out /dev/loop4
Die Datei perfekt ausgeführt. Das Schleifengerät liest 0 Bytes. In beiden Fällen habe ich FP == 3 und off == 0. Die Datei erhält korrekt die Zeichenfolgenlänge und druckt die Zeichenfolge, während die Schleife mich 0 und druckt nichts
Wie lese/schreibe ich auf ein Blockgerät?
#include <fcntl.h>
#include <cstdio>
#include <unistd.h>
int main(int argc, char *argv[]) {
char str[1000];
if(argc<2){
printf("Error args\n");
return 0;
}
int fp = open(argv[1], O_RDONLY);
printf("FP=%d\n", fp);
if(fp<=0) {
perror("Error opening file");
return(-1);
}
off_t off = lseek(fp, 0, SEEK_SET);
ssize_t len = read(fp, str, sizeof str);
str[len]=0;
printf("%d, %d=%s\n", len, static_cast<int>(off), str);
close(fp);
}
hinzugefügt, wie groß ist Ihr '~/file'? 'Losetup' für kleine Dateien kann für Systemtools nutzlos oder unsichtbar sein. – ymonad
@ymonad Es ist ein Satz, etwa 40 Bytes. Ich habe eine neue Datei ausprobiert, indem ich 'dd if =/dev/zero von = ~/file2 count = 10K' benutzt und dann mit vi bearbeite. Es scheint zu funktionieren. Wird es nur ignoriert, weil ich eine kleine Datei habe oder Blöcke ignoriert, wenn es <4K ist? Wenn ich ein 8k + 20bytes hatte, werden die letzten 20bytes ignoriert? Danke für den Kommentar –
In meiner Umgebung "losetup" geben Sie mir eine Warnung für große Datei: _ "Warnung: Datei passt nicht in einen 512-Byte-Sektor; das Ende der Datei wird ignoriert" _, und für kleine Datei: _ "Warnung: Datei ist kleiner als 512 Byte; das Loop-Gerät kann für System-Tools nutzlos oder unsichtbar sein." _. Letzteres mag also stimmen. – ymonad