Contia

Website building Thessaloniki

Το πρόγραμμα γράφει κενό αρχείο

Σχεδιασμό ιστοσελίδων Θεσσαλονίκη

Το πρόγραμμα γράφει κενό αρχείο

Σαν νέος προγραμματιστής έχει τύχει πολλές φορές να υλοποιείται ένα πρόγραμμα το οποίο γράφει σε ένα αρχείο και όταν το εκτελείται ή κάποιες φορές όταν τελειώνει η εκτέλεση του, το αρχείο να είναι κενό.

Το ερώτημα που προκύπτει και θα απαντηθεί παρακάτω είναι το εξής :

Γιατί κατά την εκτέλεση του προγράμματος δεν δημιουργούνται δεδομένα στο αρχείο;

Για το σκοπό της συζήτησής μας θα φέρουμε στο προσκήνιο τη γλώσσα γενικού σκοπού C. Το πλεονέκτημα της C έναντι των άλλων γλωσσών προγραμματισμού είναι ότι μας δίνει δυνατότητες για χαμηλού επιπέδου προγραμματισμό. Έτσι, θα είμαστε πιο κοντά στη μηχανή για να καταλάβουμε την συμπεριφορά της.

Πείραμα

Για τα πειράματά μας θα χρησιμοποιηθούν δύο συναρτήσεις:

  1. int open(const char *path, int oflags, mode_t mode);
  2. FILE *fopen(const char *filename, const char *mode);

Η συνάρτηση (1) χρησιμοποιείται για χαμηλού επιπέδου πρόσβασης σε αρχείο ενώ η συνάρτηση (2) ανήκει στην Standard I/O βιβλιοθήκη της C.

Οι βιβλιοθήκες που θα χρησιμοποιηθούν είναι οι εξής

#include  
#include 
#include 
#include 
#include

Για την συνάρτηση (1) ο κώδικας είναι

int main(){
   int out;
   out = open("file.out",O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);
   for (int i=0; i< 10;i++) {
       write(out,&i,1);
       sleep(2);
   }
   return 0;
}

Για την συνάρτηση (2) ο κώδικας είναι

int main(){
   FILE *out;
   out = fopen("file.out");
   for (int i=0; i< 10;i++) {
       fputc(i,out);
       sleep(2);
   }
   return 0;
}

Τα δύο προγράμματα είναι αρκετά απλά. Τυπώνουν 10 χαρακτήρες με κώδικα ASCII στο διάστημα [0-9] σε αρχείο file.out ανά δύο δευτερόλεπτα.

Εκτέλεση

Αν εκτελέσετε τα δύο τμήματα κώδικα θα διαπιστώσετε ότι κατά την εκτέλεση του πρώτου μπορείτε να δείτε τα δεδομένα του αρχείου. Από την άλλη, αν εκτελέσετε τον δεύτερο τμήμα κώδικα το αρχείο είναι άδειο. Έτσι προκύπτει το εξής υπο-ερώτημα

Ποια είναι η διαφορά των δύο τμημάτων κώδικα;

Η διαφορά οφείλεται στις δύο συναρτήσεις που γράφουν στο αρχείο. Η συνάρτηση write() κάθε φορά που εκτελείται κάνει και μία κλήση συστήματος. Οπότε, η εγγραφή γίνεται κατευθείαν στο αρχείο και έτσι ο κειμενογράφος μπορεί να διαβάσει τα δεδομένα του. Από την άλλη, η συνάρτηση fputc() γράφει τα αποτελέσματα σε μία ενδιάμεση μνήμη (buffer) και όταν κρίνει αυτή απαραίτητο "αδειάζει" τα περιεχόμενά του στο αρχείο (συνήθως όταν γεμίσει ή όταν κληθεί κάποια άλλη συνάρτηση που αναγκάζει το buffer να μεταφέρει τα δεδομένα του στην έξοδο).  Εδώ όμως προκύπτει το εξής υπο ερώτημα

Γιατί να μην χρησιμοποιηθεί η write() έναντι της fputc() ;

Για να δούμε τι πλεονέκτημα έχει η μία μέθοδος έναντι της άλλης ας αυξήσουμε το διάστημα από [0-9] σε [0-999.999] και διαγράφουμε από το κάθε τμήμα κώδικα το sleep. Αν δουλεύετε σε linux μπορείτε να χρησιμοποιήσετε το εργαλείο time για να μετρήσετε το χρόνο του κάθε τμήματος κώδικα. Οι χρόνοι που προκύψανε είναι

write(): 6,9 δευτερόλεπτα
fputc(): 0,075 δευτερόλεπτα

Η write() είναι αρκετά πιο αργή από την fputc() διότι κάθε φορά που εκτελείται γίνεται μία κλήση συστήματος. Να σημειωθεί ότι τα αποτελέσματα των χρόνων σχετίζονται με πολλούς παράγοντες (π.χ πόσες διεργασίες εκτελούνται, προδιαγραφές συστήματος κ.α). Άρα, ενδέχεται να έχετε άλλα αποτελέσματα, αλλά σίγουρα η write() θα είναι πιο αργή από την fputc().


About Author

contia

Η Contia ιδρύθηκε το 2017 με έδρα τη Θεσσαλονίκη έχοντας ως κύριο αντικείμενο την παροχή υπηρεσιών Διαδικτύου (κατασκευή ιστοσελίδων, κατασκευή ηλεκτρονικών καταστημάτων). Οι υπηρεσίες που προσφέρει η CONTIA εξελίσσονται συνεχώς ώστε να ανταπεξέλθει στις απαιτήσεις των ομάδων ενδιαφερομένων. Η μεταβολή του περιβάλλοντος, μας καθιστά υπεύθυνους στη διαχείριση της τεχνολογίας μέσω της συνεχής εκπαίδευσης της διοίκησης και μέσω της επένδυσης της εταιρείας στην έρευνα και ανάπτυξη. Προς αυτήν την κατεύθυνση, οι υπηρεσίες μας συνεχίζουν να εξελίσσονται όσο ερχόμαστε αντιμέτωποι με νέα ζητήματα και νέες προκλήσεις για την ικανοποίηση της αγοράς. Ο κλάδος που υπεισέρχεται η εταιρεία απαιτεί να έχουμε σχεδιασμένες τις Επιχειρηματικές Αρχές ώστε να διασφαλίσουμε ότι η CONTIA έχει στόχο να κάνει πάντοτε υπεύθυνες επιλογές. Τέλος, σαν εταιρεία αναγνωρίζουμε πως η οικοδόμηση και η διατήρηση της εμπιστοσύνης των πελατών και όλων των ομάδων ενδιαφερομένων απαιτεί αδιάλειπτη προσήλωση και συνεχή ετοιμότητα τόσο από τη διοίκηση της επιχείρησης όσο και από το προσωπικό της.

Leave a Reply

articles categories

Archieves

Donate

Donation Form 2018

Help us to improve our blog. Please donate, if theses posts related with your interests
1,00
Personal Info

Donation Total: 1,00€

December 2019
MTWTFSS
« Apr  
 1
2345678
9101112131415
16171819202122
23242526272829
3031