• Downloads
  • ! Read Me !
  • Μαθήματα
  • Φοιτητικά
  • Τεχνικά Θέματα
  • Συζητήσεις
  • Happy Hour!
  • About THMMY.gr
 V  < 
Search:  
Welcome, Guest. Please login or register.
June 17, 2025, 00:35:59 am

Login with username, password and session length
Links
  Thmmy.gr portal
   Forum
   Downloads
   Ενεργ. Λογαριασμού
   Επικοινωνία
  
  Χρήσιμα links
   Σελίδα τμήματος
   Βιβλιοθήκη Τμήματος
   Elearning
   Φοιτητικά fora
   Πρόγραμμα Λέσχης
   Πρακτική Άσκηση
   Ηλεκτρονική Εξυπηρέτηση Φοιτητών
   Διανομή Συγγραμμάτων
   Ψηφιακό Καταθετήριο Διπλωματικών
   Πληροφορίες Καθηγητών
   Instagram @thmmy.gr
   mTHMMY
  
  Φοιτητικές Ομάδες
   ACM
   Aristurtle
   ART
   ASAT
   BEAM
   BEST Thessaloniki
   EESTEC LC Thessaloniki
   EΜΒ Auth
   IAESTE Thessaloniki
   IEEE φοιτητικό παράρτημα ΑΠΘ
   SpaceDot
   VROOM
   Panther
  
Πίνακας Ελέγχου
Welcome, Guest. Please login or register.
June 17, 2025, 00:35:59 am

Login with username, password and session length

Αναζήτηση

Google

THMMY.gr Web
Πρόσφατα
Ισραήλ - Ιράν: Πόλεμος στ...
by Yamal
[June 16, 2025, 23:46:31 pm]

[Οργάνωση Υπολογιστών] Γε...
by RAFI
[June 16, 2025, 22:46:54 pm]

[Σ.Π.Η.Ε.] Γενικές απορίε...
by Nikos_313
[June 16, 2025, 19:49:00 pm]

[ΘΤΠΑ] Γενικές απορίες κα...
by Nikos_313
[June 16, 2025, 16:56:56 pm]

[Εφ.Θερμοδυναμική] Γενικέ...
by Λαμπτήρας
[June 16, 2025, 15:55:08 pm]

[Αρχές Οικονομίας] Να επι...
by _Trob
[June 16, 2025, 13:28:21 pm]

[Σ.Α.Π.Γ.] Εργασία 2025
by Nikos_313
[June 16, 2025, 12:13:45 pm]

Αποτελέσματα Εξεταστικής ...
by Nikos_313
[June 16, 2025, 12:01:53 pm]

Πρακτική Άσκηση ΤΗΜΜΥ 201...
by George_RT
[June 16, 2025, 10:22:18 am]

[Διανεμημένη Παραγωγή] Γε...
by Διάλεξις
[June 16, 2025, 01:56:37 am]

Αντικατάστασης πυκνωτή σε...
by nmpampal
[June 15, 2025, 16:25:56 pm]

[Σ.Π.Η.Ε.] Παλιά θέματα -...
by nmpampal
[June 15, 2025, 06:43:15 am]

Το thmmy.gr στο instagram...
by Mr Watson
[June 15, 2025, 00:50:23 am]

[Λογισμός ΙΙ] Απορίες σε...
by el mariachi
[June 14, 2025, 20:47:07 pm]

ΠΡΟΣΟΧΗ στο ανέβασμα θεμά...
by tzortzis
[June 14, 2025, 16:54:08 pm]

Ρυθμίσεις Θεμάτων της Ανώ...
by el mariachi
[June 14, 2025, 11:56:45 am]

Πότε θα βγει το μάθημα; -...
by Nikos_313
[June 14, 2025, 10:00:55 am]

Αρχείο Ανακοινώσεων [Arch...
by Nikos_313
[June 14, 2025, 09:58:14 am]

Αλέξης Τσίπρας, η επιστρο...
by Yamal
[June 14, 2025, 04:42:23 am]

Έναρξη Δηλώσεων Συμμετοχή...
by IEEE SB
[June 14, 2025, 00:10:19 am]
Στατιστικά
Members
Total Members: 9960
Latest: valco08
Stats
Total Posts: 1426678
Total Topics: 31711
Online Today: 164
Online Ever: 2093
(April 17, 2025, 08:47:49 am)
Users Online
Users: 50
Guests: 105
Total: 155
Mikekmp
miltan8
Giorgos2222
DemetriosL
Giannis Masterio
Saint_GR
tasos gourd
superkolios
m.renia
dkonst
alex_samaras_
EiriniGeo
vagk
aalmpanb
babis.o.sougias
Maximos7
Deviate
sigklitiki
arisap
Spyridon01101
mpizos
antontsiorvas
Ulmo
Βασιλης
Yamal
Christina_R
Zaxarenia
maria.r
apol
anon
acolak
akoil
satsok
VaiosG
vastridam
leolam
Carot1456
soph553
kouf
Born_Confused
ELEF
sassi
gkyrodi
jimalexoud
HlektrikhPatata
iliaskou
noys
Εμφάνιση

Νέα για πρωτοετείς
Είσαι πρωτοετής;... Καλώς ήρθες! Μπορείς να βρεις πληροφορίες εδώ. Βοήθεια για τους καινούργιους μέσω χάρτη.
Κατεβάστε εδώ το Android Application για εύκολη πρόσβαση στο forum.
Ανεβάζετε τα θέματα των εξετάσεων στον τομέα Downloads με προσοχή στα ονόματα των αρχείων!

Νέα!
Για οποιοδήποτε πρόβλημα με register/login, στείλτε email στο contact@thmmy.gr.
THMMY.gr > Forum > Μαθήματα Βασικού Κύκλου > 1ο Εξάμηνο > Δομημένος Προγραμματισμός (Moderators: Tasos Bot, tzortzis, Nekt) > Αρχεία
0 Members and 1 Guest are viewing this topic.
Pages: [1] Go Down Print
Author Topic: Αρχεία  (Read 838 times)
mamalos
Νεούλης/Νεούλα
*
Posts: 49


View Profile
Αρχεία
« on: June 19, 2011, 14:30:38 pm »

Μίλησα με κάποιους από εσάς, και κατάλαβα ότι το πρόβλημα με τα αρχεία είναι ότι δε γνωρίζετε τι ακριβώς είναι, οπότε ό,τι σας λέμε ακούγονται λίγο "κινέζικα". Θα αποπειραθώ μία εξήγση ώστε να καταλάβετε τι ακριβώς συμβαίνει με αυτά.

Το αρχείο είναι ένα κομμάτι μνήμης, το οποίο ΕΙΝΑΙ ΣΕΙΡΙΑΚΟ. Αυτό σημαίνει ότι υπάρχει κάτι σαν "βελόνα" (όπως π.χ. η βελόνα του πικάπ, της κασέτας, το λέηζερ του CD/DVD, κ.ο.κ.) η οποία περνάει "πάνω από το αρχείο" και ανάλογα με το τι της λέμε, αυτή διαβάζει ή γράφει πάνω από/σε αυτό. Φυσικά, αυτό που σας λέω είναι μια υπεραπλούστευση του τι συμβαίνει και δεν είναι 100% ακριβές, όμως ως παρομοίωση μπορεί να εκφράσει ακριβώς αυτό που συμβαίνει με τα αρχεία.

Όταν ανοίγουμε, λοιπόν, ένα αρχείο, η βελόνα πηγαίνει στο σημείο που την τοποθετήσαμε με την fopen().  Ακολουθεί κομμάτι του man page της fopen όπως αυτή δίνεται στο FreeBSD, και μπορείτε να το χρησιμοποιείτε ως αναφορά. Μην το διαβάσετε τώρα, θα μπερδευτείτε. Χρησιμοποιήστε το σαν αναφορά όποτε κολλάτε:

    The fopen() function opens the file whose name is the string pointed to
     by path and associates a stream with it.

     The argument mode points to a string beginning with one of the following
     sequences (Additional characters may follow these sequences.):

     “r”     Open text file for reading.  The stream is positioned at the
             beginning of the file.

     “r+”    Open for reading and writing.  The stream is positioned at the
             beginning of the file.

     “w”     Truncate to zero length or create text file for writing.  The
             stream is positioned at the beginning of the file.

     “w+”    Open for reading and writing.  The file is created if it does not
             exist, otherwise it is truncated.  The stream is positioned at
             the beginning of the file.

     “a”     Open for writing.  The file is created if it does not exist.  The
             stream is positioned at the end of the file.  Subsequent writes
             to the file will always end up at the then current end of file,
             irrespective of any intervening fseek(3) or similar.

     “a+”    Open for reading and writing.  The file is created if it does not
             exist.  The stream is positioned at the end of the file.  Subse‐
             quent writes to the file will always end up at the then current
             end of file, irrespective of any intervening fseek(3) or similar.

     The mode string can also include the letter ``b'' either as a third char‐
     acter or as a character between the characters in any of the two-charac‐
     ter strings described above.  This is strictly for compatibility with
     ISO/IEC 9899:1990 (“ISO C90”) and has no effect; the ``b'' is ignored.

Επίσης ας έχουμε στο νου μας τον παρακάτω κώδικα ως παράδειγμα:

1) int a[2], b=15;
2) char c[10] = "lalakis";
3) FILE *fp;
4)
5) fp=fopen("/path/tofile.txt", "r+");
6) fread(&a[0], sizeof(int), 1, fp);
7) a[1]=8;
8) fwrite(&a[1], sizeof(int), 1, fp);
9) fseek(fp, -sizeof(int), "SEEK_CUR");
10) fwrite(&b, sizeof(int), 1, fp);
11) fclose(fp);

Αν, λοιπόν, ανοίξουμε το αρχείο με fopen("/path/tofile.txt", "r"), λέμε στη βελόνα να πάει στην αρχή του αρχείου που βρίσκεται στο δίσκο μας στο μονοπάτι "/path/tofile.txt", και να επιτρέπει ανάγνωση+εγγραφή από/προς αυτό το αρχείο, και να επιστρέψει έναν file pointer στο fp, από όπου εμείς θα μπορούμε να διαχειριστούμε τη βελόνα. Μόλις δώσουμε την εντολή 6), διαβάζουμε έναν (1*sizeof(int) = 4 bytes (συνήθως)) ακέραιο από το αρχείο μας, και το περιεχόμενο που διαβάσαμε με τη βελόνα το γράψαμε στη μνήμη του υπολογιστή που αντιστοιχεί στη θέση &a[0] (:= a για τους περίεργους). Μόλις τελειώσε η fread, η βελόνα βρίσκεται 4 bytes μετά από την αρχή του αρχείου, δηλαδή δείχνει ακριβώς στο 5ο byte.

Η εντολή 8), ζητάει από τη βελόνα να γράψει έναν ακέραιο (1*sizeof(int) = 4bytes, πάλι) από το σημείο που βρίσκεται και μετά. Άρα, εφόσον η βελόνα βρίσκεται στο 5ο byte μετά από την αρχή του αρχείου (αφού δεν ακολούθησε άλλη εντολή που να επηρεάσει τη βελόνα από την εντολή 6 μέχρι την 8), ξεκινάει να γράφει τα 4 bytes ξεκινώντας από το 5ο μέχρι να φτάσει και στο 8ο. Μόλις τελειώσει η εγγραφή, τα δεδομένα έχουν γραφτεί στις προαναφερθείσες θέσεις και η βελόνα βρίσκεται "πάνω" από την 9η θέση (byte) μετά την αρχή του αρχείου.

Αυτό σημαίνει ότι οποιαδήποτε εντολή ανάγνωσης-εγγραφής στο αρχείο (τύπου fread, fwrite, fgets, fputs, fprintf, fscanf, κλπ) εκτελεστεί, θα ξεκινήσει να "ενεργεί" από τη θέση 9 και μετά. Αν θέλουμε να αλλάξουμε κάτι το οποίο προηγείται ή έπεται της θέσης που βρίσκεται η βελόνα, χρησιμοποιούμε εντολές τύπου fseek() για να πάμε τη βελόνα στο σημείο που θέλουμε. Αν, στο παράδειγμά μας, εκτελεστεί η 9η εντολή, τότε η βελόνα μετακινείται 4 bytes (:= sizeof(int)) "αριστερά" (λόγω του "-") από το σημείο που βρίσκεται ήδη η βελόνα (λόγω του "SEEK_CUR"). Άρα η βελόνα πάει στη θέση 9-4=5 και παραμένει εκεί. Όταν, λοιπόν, πάει να εκτελεστεί η εντολή 10), τότε το πρόγραμμα θα γράψει έναν ακέραιο, το 15 (το οποίο βρίσκεται αποθηκευμένο στη μεταβλητή b , το οποίο είνα αποθηκευμένο στη μνήμη "RAM" του υπολογιστή μας) στα 4 bytes του αρχείου που ξεκινάνε από την 5η θέση από την αρχή του. Άρα στις θέσεις 5-8, και η βελόνα μετά την 10η εντολή θα βρίσκεται πάνω από τη θέση 9. Με την συνάρτηση fclose(), κλείνουμε το αρχείο μας.

Η διαφορά, συνεπώς, από αυτά που είχαμε μάθει έως τώρα, είναι ότι στο αρχείο δεν έχουμε "τυχαία" προσπέλαση (εν αντιθέσει με τη RAM, όπου δηλώναμε μεταβλητές, έμπαιναν αυτόματα (από τον compiler) σε κάποια θέση μνήμης όπου μετά βλέπουμε το περιεχόμενό τους χρησιμοποιώντας το όνομα της μεταβλητής που τους δώσαμε). Στο αρχείο, λέμε σε ποιο σημείο θα βρίσκεται η βελόνα τη στιγμή που το ανοίγουμε, λέμε για ποιον λόγο θέλουμε να το χρησιμοποιήσουμε (μέσα από τα "r, w, a" και το +) και ό,τι κίνηση κάνουμε από και προς το αρχείο έχει να κάνει με το που βρίσκεται η βελόνα τη στιγμή που εκτελείται η εντολή. Αναγκαζόμαστε, συνεπώς, να "μετράμε" (υπό κάποια έννοια) τις κινήσεις της βελόνας ώστε να διαβάζουμε/γράφουμε δεδομένα από και προς το αρχείο κατά βούληση.

Δεν ξέρω αν θα μπορώ να σας απαντήσω απορίες σε αυτό το thread (έχω σοβαρό πρόβλημα χρόνου αυτόν τον καιρό, βλέπετε τι μέρα ξεκίνησα το thread...), αλλά θεωρώ ότι σας τα έκανα όσο πιο λιανά μπορούσα. Τώρα μπορείτε να χρησιμοποιήσετε το google για να λύσετε τις απορίες σας ή όποιοι από εσάς έχουν ήδη καταλάβει τι παίζει με τα αρχεία και παρακολουθείτε το thread μπορείτε να λύνετε τις τυχόν απορίες που θα προκύψουν.
« Last Edit: June 20, 2011, 13:29:20 pm by mamalos » Logged
Pages: [1] Go Up Print
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Scribbles2 | TinyPortal © Bloc | XHTML | CSS
Loading...