1 /* File myrandom.c */
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <sys/times.h>
5
6 int main(int argc,char **argv)
7 {
8 unsigned char sds[]={13,17,19,23,29};
9 int i,j,s,v;
10 struct tms dummy;
11 if(argc>1) i=atoi(argv[1]);
12 while(argc<2 || i--)
13 {
14 s=s*sds[4];
15 v=times(&dummy);
16 for(j=0;j<4;j++) s+=sds[j]*(v>>(8*j));
17 putchar(s);
18 }
19 return 0;
20 }
Hat mich jetzt gerade mal 15 Minuten gekostet.
Ich hätte nicht gedacht, dass nur 20 Zeilen Quellcode nötig wären. Man merkt, ich bin mit der Materie nicht wirklich vertraut. Zu dieser Thematik muss ich mich bei Gelegenheit kundig machen.
Mal sehen, ob ich das zusammenbekomme:
L1: Kommentar
L2-4: Einbindung benötigter Header
L6: Definition Funktion main()
L7: Block-Beginn Funktion main()
L8: Definition sds[]-Array für Zeichen (standard deviations of generated variables?) - in diesem Fall Steuerzeichen (numerische Bedeutung: Primzahlen)
13 = 'CR' (Carriage Return)
17 = 'DC1' (Device Control 1)
19 = 'DC3' (~ 3)
23 = 'ETB' (End of Transmission Block)
29 = 'GS' (Group Separator)
L9: Deklaration von Integer-Variablen "i", "j" (Zähler) und "s" (Symbol?) sowie "v" (Zeit vergangen?)
L10: Deklaration Struktur tms mit Namen "dummy"
L11: Parameter angegeben? Wenn ja, Umwandlung des ersten Parameters von ASCII nach Integer und Speichern mit Variable "i"
L12: Kopf der Schleife;
L13: Block-Beginn der Schleife
L14-L16: Erzeugung des zufälligen Zeichens mit Multiplikation, Addition und Right-Shifting und einer inneren Schleife (
L16 )
L17: "s" wird auf die Standardausgabe geschrieben
L18: Block-Ende der Schleife
L19: Verlassen der Funktion main() mit Rückgabewert "0"
L20: Block-Ende Funktion main()
$> dd bs=512 count=2000 if=myrandom of=randomfile
14+1 records in
14+1 records out
$> ls -l randomfile
-rw-r--r-- 1 sx users 7416 Feb 3 17:13 randomfile
$> myrandom 1000 > randomfile2
$> ls -l randomfile2
-rw-r--r-- 1 sx users 142577 Feb 3 17:13 randomfile2
Hätte in Zeile 13 "
while (i--)" nicht gereicht oder wolltest du dir den Test auf "(argc<2) ? a:b" sparen?
Was passiert auf Zeile (Line) 16 im Detail, Martin? Kannst du das dem escimo erklären?
Grüße
Stephan