Συντονιστής: konnn
medigeek έγραψε:Νομίζω η ερώτησή του είναι: πώς διάολο γίνεται να γράφει 100 εκατομμύρια φορές σε ένα αρχείο τόσο γρήγορα;
Εμένα σε dual core έγραψε 1 εκατομ. φορές σε ~20 δευτερόλεπτα σύμφωνα με την εντολή time.
linuxs έγραψε:
edit: θα το πάρω αλλιώς, για να γίνει ένα fgets() θα δουλέψει και ο πυρήνας? :/ και αν ναι, για να γίνουν 100.000.000 σε πραγματικό χρόνο ας πούμε 5 sec πόσο περίπου χρόνο θα έχει ο πυρήνας? 4.9 , 2, 1sec?
gcc -S myprog.c
linuxs έγραψε:
Στην πραγματικότητα δεν εμφανίζει καν sec. ¨Εχω μόνο Milisec! Αυτό είναι το περίεργο... :/ Εγώ περίμενα να βγάλει κάποια sec. ¨Εστω και ένα!!!!
έγραψε:gcc -Wall -o "test" "test.c" (in directory: /home/forger/Desktop)
test.c: In function ‘main’:
test.c:9:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
test.c:9:5: note: use option -std=c99 or -std=gnu99 to compile your code
Compilation failed.
test.c:12:1: warning: control reaches end of non-void function [-Wreturn-type]
έγραψε:gcc -Wall -o "test" "test.c" (in directory: /home/forger/Desktop)
Compilation failed.
test.c: In function ‘main’:
test.c:11:9: error: incompatible type for argument 2 of ‘fputs’
/usr/include/stdio.h:682:12: note: expected ‘struct FILE * __restrict__’ but argument is of type ‘FILE’
έγραψε:gcc -Wall -o "test" "test.c" (in directory: /home/forger/Desktop)
test.c: In function ‘main’:
test.c:11:14: warning: ‘infile’ may be used uninitialized in this function [-Wuninitialized]
Compilation finished successfully.
#include <stdio.h>
int main() {
FILE * infile;
char buf[100];
int n;
infile = fopen("mylog.txt","a");
while (1) {
if (n >= 100000000) { fclose(infile); return 0; }
fputs(buf, infile);
n++;
}
return 0;
}
#include <stdio.h>
int main() {
FILE * infile;
char buf[100];
int n;
while (1) {
if (n >= 100000000) { return 0; }
infile = fopen("mylog.txt","a");
fputs(buf, infile);
fclose(infile);
n++;
}
return 0;
}
linuxs έγραψε:Καλησπέρα,
έχω μια άσκηση για την σχολή και έχω ένα προβληματάκι. Μπορεί κάποιος να μου αν ξέρει πως ακριβώς δουλεύει η fputs? :/
- Κώδικας: Επιλογή όλων
FILE infile;
char buf[100];
/* Open file here */
for(0 -> 100){
fputs(buf, infile);
}
Μετράω τα παρακάτω με κάποιον Handler και χρησιμοποιώντας την getitimer().
Σίγουρα χρησιμοποιείται ο CPU για να γίνουν οι εγγραφές στο αρχείο. Ο πυρήνας ίσως χρειαστεί για λίγα Milisec για αν ανοίξει το αρχείο και φυσικά ο πραγματικός χρόνος θα αυξάνεται. Οι τιμές που πέρνω για 100.000.000 εγγραφές είναι:
REAL: 30 s
CPU: 10 s
KERNEL: 5 s
και κάποια Milisec σε κάθε ένα. Είναι πιστευτά? :/ Δεν μπορούμε να ξέρουμε πόσο ακριβώς έιναι αλλα είναι κάθόλου λογικά τα παραπάνω? ;/
ευχαριστώ πολύ για κάθε απάντηση.!