Δημοσιεύτηκε: 12 Μαρ 2012, 02:17
Νομίζω δεν μπορείς να υπολογίσεις αυτό τον χρόνο. Κι αν τον υπολογισεις, στο δικό σου υπολογιστή θα είναι 3, στον υπολογιστή του Γιάννη θα είναι 5, του Κώστα 13 που έχει pentium III. Δεν είναι standard 5/1 = 5.
OK, τώρα με σύγχισες τελείως.
1. Δείξε ολόκληρο τον κώδικα, μαζί με το getitimer(). Ο κώδικας που έδωσες στο πρώτο ποστ δεν βγάζει νόημα.
2. Ως σημείωση, το for loop αναφέρει πως είναι σε C99:
3. Το fputs θέλει "FILE *":
4. Επίσης πρέπει να θέσεις το output αρχείο:
Αλλιώς παίρνεις segmentation fault.
Ένα παράδειγμα κώδικα, παρόμοιο με αυτό που βάζεις εσύ:
(με 100 εκατομμ. και ανοίγουμε το αρχείο 1 φορά)
Νομίζω κατάλαβα το πρόβλημα (ή την ερώτηση τελοσπάντων)... ο κώδικας είναι σωστός, αλλά το char buf[100] είναι ένα κενό variable. Αφού το char buf είναι κενό, υποθέτω πως ανοίγει το αρχείο αλλά δεν γράφει τίποτα (χαρακτήρας \0 ή 1 byte ; Δεν ξέρω). Στο αρχείο μπαίνει μόνο 1 byte (;) σε κάθε γύρο του loop [ Το ίδιο συμβαίνει όταν βάλεις το fopen() μέσα στο while loop. ]
Αν βάλεις το fopen() μέσα στο loop θα καθυστερήσει αφού ανοιγοκλείνει το αρχείο συνέχεια:
linuxs έγραψε:
Στην πραγματικότητα δεν εμφανίζει καν sec. ¨Εχω μόνο Milisec! Αυτό είναι το περίεργο... :/ Εγώ περίμενα να βγάλει κάποια sec. ¨Εστω και ένα!!!!
OK, τώρα με σύγχισες τελείως.

1. Δείξε ολόκληρο τον κώδικα, μαζί με το getitimer(). Ο κώδικας που έδωσες στο πρώτο ποστ δεν βγάζει νόημα.
2. Ως σημείωση, το for loop αναφέρει πως είναι σε C99:
έγραψε: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]
3. Το fputs θέλει "FILE *":
έγραψε: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’
4. Επίσης πρέπει να θέσεις το output αρχείο:
έγραψε: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.
Αλλιώς παίρνεις segmentation fault.
Ένα παράδειγμα κώδικα, παρόμοιο με αυτό που βάζεις εσύ:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#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;
}
(με 100 εκατομμ. και ανοίγουμε το αρχείο 1 φορά)
Νομίζω κατάλαβα το πρόβλημα (ή την ερώτηση τελοσπάντων)... ο κώδικας είναι σωστός, αλλά το char buf[100] είναι ένα κενό variable. Αφού το char buf είναι κενό, υποθέτω πως ανοίγει το αρχείο αλλά δεν γράφει τίποτα (χαρακτήρας \0 ή 1 byte ; Δεν ξέρω). Στο αρχείο μπαίνει μόνο 1 byte (;) σε κάθε γύρο του loop [ Το ίδιο συμβαίνει όταν βάλεις το fopen() μέσα στο while loop. ]
Αν βάλεις το fopen() μέσα στο loop θα καθυστερήσει αφού ανοιγοκλείνει το αρχείο συνέχεια:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#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;
}