Pseudo-Zufallsdatenquelle/senke für Medientests unter Linux

OP #3080621
Lesenswert?

Es ist ein einfacher Zufallsgenerator mit fest eingestelltem Startwert, 
der entweder einen "Zufalls"-Datenstrom über stdout ausgibt, oder einen 
Datenstrom von stdin einliest und mit der Ausgabe des Zufallsgenrators 
vergleicht.
1
# mockrand compilieren:
2
gcc -o mockrand mockrand.c
3

4
sudo -s         # Shell mit root-Rechten öffnen
5

6
# 16 GB Testdaten in 1MB-Blocks auf den Datenträger /dev/sdx schreiben:
7
./mockrand -w | dd of=/dev/sdx bs=1M count=16384
8

9
# 16 GB Testdaten in 1MB-Blocks vom Datenträger /dev/sdx lesen und vergleichen:
10
dd if=/dev/sdx bs=1M count=16384 | ./mockrand -r

Selbstverständlich sind nach dem Test die Daten futsch, die vorher auf 
dem Datenträger waren...
Angehängte Dateien:
Moderator Persönliche Seite #3081316
Lesenswert?

Uhu Uhuhu schrieb:
> Es ist ein einfacher Zufallsgenerator mit fest eingestelltem Startwert,

Der Code ist leider nicht ganz "sauber".

Das hier:

   !strcmp(argv[1],...

kann einen Core-Dump erzeugen, da Du gar nicht prüfst, ob argc überhaupt 
gleich 2 ist. Wenn Du also das Programm versehentlich ohne Argument 
aufrufst, greift strcmp irgendwo ins Leere...

Die Meldung

   printf("read error @ block 0x%lx\n", lasterr);

ist irreführend. Wenn sie auftritt, dann sind lediglich die Daten 
verschieden. Aber es liegt kein Read-Error (im Sinne von Lesefehler auf 
Betriebssystem-Ebene) vor. Den hättest Du nämlich nach dem 
read-System-Call prüfen müssen... was Du leider vergessen hast ;-)

Verständlicher wäre daher:

   printf("data differs @ block 0x%lx\n", lasterr);

Ausserdem ist der Code nicht Endian-fest: Auf Maschine X (i386) die 
Platte vollschreiben, dann Platte auf andere Maschine Y (Power PC) 
umhängen kann evtl. beim Test in die Hose gehen.
OP #3081386
Lesenswert?

Frank M. schrieb:
> kann einen Core-Dump erzeugen, da Du gar nicht prüfst, ob argc überhaupt
> gleich 2 ist.

Ein bischen was kannst du ja auch noch tun ;-) In meiner aktuellen 
Version sind noch einige Sachen mehr gefixt.

> Ausserdem ist der Code nicht Endian-fest: Auf Maschine X (i386) die
> Platte vollschreiben, dann Platte auf andere Maschine Y (Power PC)
> umhängen kann evtl. beim Test in die Hose gehen.

Na ja, für eine quick-and-dirty-Version kann man das verschmerzen...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren