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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.