Genevil Δημοσ. 14 Δεκεμβρίου 2011 Δημοσ. 14 Δεκεμβρίου 2011 Καλησπέρα σας.. Θα ήθελα να κάνω μερικές ερωτήσεις.. 1ον, Με προβληματίζει το γεγονός ότι τα δυαδικά αρχεία σε C ( π.χ. δημιουργημένα με fopen( "Filename", "wb") ) όταν τα ανοίξω με notepad δεν είναι καθόλου δυαδικά, δηλαδή διαδοχικά 0 και 1... Μάλιστα φαίνεται να μην έχουν καμία απολύτως διαφορά με τα κανονικά (δημιουργημένα με w)... Ποιά λοιπόν είναι η διαφορά αυτών των 2; Και γιατί να μη χρησιμοποιούμε πάντα το w; 2ον, απ'όσα έχω κάνει μέχρι τώρα στο πανεπιστήμιο, δε μας έχει μιλήσει κανείς για το πως μπορούμε να κάνουμε τα προγράμματά μας γραφικά, πχ να έχουν παράθυρα, που μπορείς να πατήσεις με το ποντίκι κτλ. Ξέρεις κανείς αν υπάρχουν online tutorials για κάτι ανάλογο για C με τα βασικά, για να μπορέσω να ανταπεξέλθω; Ή κάποιο καλό βιβλίο να προτείνει.. 3ον, έχω κατά καιρούς ακούσει πολύ καλά λόγια για τα linux σαν λειτουργικό... Έχουμε Debian στο πανεπιστήμιο και στο σπίτι έχω περάσει τα Ubuntu.. Αλλά δε βλέπω πραγματικά τι παραπάνω έχουν από τα Windows.. Μάλιστα υστερούν σε σχέση με τα Windows από την άποψη ότι δεν υποστηρίζουν πολλές εφαρμογές, όπως παιχνίδια κα... 4ον, έχω ακούσει ότι για να δημιουργήσεις κώδικα έχοντας ένα εκτελέσιμο, πρέπει να έχεις γνώσεις αρχιτεκτονικής του υπολογιστή σου.. Ποιές ακριβώς είναι αυτές οι γνώσεις που πρέπει να έχεις; Ο κάθε compiller όταν δημιουργεί ένα εκτελέσιμο, ακριβώς το ίδιο πράγμα δε δημιουργεί για κάθε υπολογιστή; Δηλαδή ένα εκτελέσιμο που δημιουργήθηκε σε έναν υπολογιστή Α δεν τρέχει σε έναν υπολογιστή Β; Αν ναι, τότε τί ακριβώς διαφέρει από σύστημα σε σύστημα; Και βασικά έχω κι άλλα πολλά πράγματα που δεν καταλαβαίνω αλλά μάλλον θα γίνω κουραστικός αν τα ρωτήσω όλα σ'αυτό το post... Ευχαριστώ πολύ για κάθε απάντηση εκ των προτέρων!!
CtrlFreak Δημοσ. 14 Δεκεμβρίου 2011 Δημοσ. 14 Δεκεμβρίου 2011 2ον, απ'όσα έχω κάνει μέχρι τώρα στο πανεπιστήμιο, δε μας έχει μιλήσει κανείς για το πως μπορούμε να κάνουμε τα προγράμματά μας γραφικά, πχ να έχουν παράθυρα, που μπορείς να πατήσεις με το ποντίκι κτλ. Ξέρεις κανείς αν υπάρχουν online tutorials για κάτι ανάλογο για C με τα βασικά, για να μπορέσω να ανταπεξέλθω; Ή κάποιο καλό βιβλίο να προτείνει.. Δεν γνωρίζω αν υπάρχει κάποιο για C αλλά για C++ υπάρχει το Qt που τρέχει σε όλα τα λειτουργικά. 3ον, έχω κατά καιρούς ακούσει πολύ καλά λόγια για τα linux σαν λειτουργικό... Έχουμε Debian στο πανεπιστήμιο και στο σπίτι έχω περάσει τα Ubuntu.. Αλλά δε βλέπω πραγματικά τι παραπάνω έχουν από τα Windows.. Μάλιστα υστερούν σε σχέση με τα Windows από την άποψη ότι δεν υποστηρίζουν πολλές εφαρμογές, όπως παιχνίδια κα... Στον απλό χρήστη δεν προσφέρουν τίποτα, ίσα ίσα του κάνουν και την ζωή δύσκολη ορισμένες φορές. Είναι μια εναλλακτική για κάποιον που θέλει να ασχοληθεί περισσότερο και να έχει μεγαλύτερο έλεγχο και ευελιξία σε ορισμένες εργασίες. 4ον, έχω ακούσει ότι για να δημιουργήσεις κώδικα έχοντας ένα εκτελέσιμο, πρέπει να έχεις γνώσεις αρχιτεκτονικής του υπολογιστή σου.. Ποιές ακριβώς είναι αυτές οι γνώσεις που πρέπει να έχεις; Ο κάθε compiller όταν δημιουργεί ένα εκτελέσιμο, ακριβώς το ίδιο πράγμα δε δημιουργεί για κάθε υπολογιστή; Δηλαδή ένα εκτελέσιμο που δημιουργήθηκε σε έναν υπολογιστή Α δεν τρέχει σε έναν υπολογιστή Β; Αν ναι, τότε τί ακριβώς διαφέρει από σύστημα σε σύστημα; Αν ο υπολογιστή Α τρέχει Windows και ο υπολογιστής Β Linux τότε προφανώς και το εκτελέσιμο του καθενός δεν θα τρέχει στο άλλο. Σε γενικές γραμμές αν ο κώδικας που γράφεις πχ C/C++ είναι καθαρός κώδικας δίχως την χρήση εντολών του συστήματος δεν θα υπάρχει πρόβλημα να τον μεταφέρεις. Παρόλα αυτά αν θέλεις να φτιάξεις παράθυρα, βάσεις δεδομένων κτλπ πχ η Qt σου δίνει την δυνατότητα να μεταφέρεις αυτόματα τον κώδικα. Κάτι που πχ η Visual C++ δεν κάνει γιατί είναι γραμμένη καθαρά για Windows.
V.I.Smirnov Δημοσ. 14 Δεκεμβρίου 2011 Δημοσ. 14 Δεκεμβρίου 2011 Στα πολύ γρήγορα : 1) Ένα δυαδικό αρχείο σημαίνει ότι δεν έχει αποθηκευμένη πληροφορία στην οπτικά αναγνώσιμη μορφή της (δηλ. ASCII χαρακτήρες). Αν ανοίξεις ένα τέτοιο με το notepad θα δεις 'τυχαίους' χαρακτήρες που αντιστοιχούν στα δυαδικά νούμερα που αποθηκεύτηκαν. Για να δεις τα καθεαυτό δυαδικά νούμερα χρειάζεται hex editor. 2) H κατασκευή γραφικού περιβάλλοντος είναι ολόκληρη ιστορία από μόνη της. Είναι λογικό να μην διδάσκεται παρά μόνον σε τμήματα πληροφορικής - και αν... To "για C για τα βασικά" και γραφικό περιβάλλον που ζητάς είναι ασύμβατες απαιτήσεις. Για να ασχοληθείς μ' αυτό πρέπει να ξέρεις πρώτα καλά κάποια γλώσσα διότι το γραφικό περιβάλλον χρησιμοποιεί κατά κόρον τις ιδιότητες αυτής. Από τις καλύτερες επιλογές είναι η Qt (προϋποθέτει γνώσεις C++). 3) Ρωτάς σε λάθος νήμα... 4) Έχεις μπερδέψει τα πράγματα. Το "για να δημιουργήσεις κώδικα έχοντας ένα εκτελέσιμο, πρέπει να έχεις γνώσεις αρχιτεκτονικής του υπολογιστή σου" εννοεί να αναπαράγεις τον πηγαίο κώδικα από το εκτελέσιμο αρχείο. Πολύ δύσκολη δουλειά και συνήθως ανεπιτυχής. Ο κλάδος που ασχολείται μ' αυτό λέγεται "reverse engineering" και είναι για γκουρού. Οι άλλοι θα σου πουν περισσότερα...
migf1 Δημοσ. 14 Δεκεμβρίου 2011 Δημοσ. 14 Δεκεμβρίου 2011 Στα γρήγορα κι εγώ... Καλησπέρα σας.. Θα ήθελα να κάνω μερικές ερωτήσεις.. 1ον, Με προβληματίζει το γεγονός ότι τα δυαδικά αρχεία σε C ( π.χ. δημιουργημένα με fopen( "Filename", "wb") ) όταν τα ανοίξω με notepad δεν είναι καθόλου δυαδικά, δηλαδή διαδοχικά 0 και 1... Μάλιστα φαίνεται να μην έχουν καμία απολύτως διαφορά με τα κανονικά (δημιουργημένα με w)... Ποιά λοιπόν είναι η διαφορά αυτών των 2; Και γιατί να μη χρησιμοποιούμε πάντα το w; Η βασική διαφορά μεταξύ text & binary mode αρχείων στη C είναι πως δεν μεταφράζονται το ίδιο κάποιοι ειδικοί χαρακτήρες, όπως για παράδειγμα οι αλλαγές γραμμών. 2ον, απ'όσα έχω κάνει μέχρι τώρα στο πανεπιστήμιο, δε μας έχει μιλήσει κανείς για το πως μπορούμε να κάνουμε τα προγράμματά μας γραφικά, πχ να έχουν παράθυρα, που μπορείς να πατήσεις με το ποντίκι κτλ. Ξέρεις κανείς αν υπάρχουν online tutorials για κάτι ανάλογο για C με τα βασικά, για να μπορέσω να ανταπεξέλθω; Ή κάποιο καλό βιβλίο να προτείνει.. Υπάρχει λόγος για αυτό... ο προγραμματισμός γραφικού περιβάλλοντος προϋποθέτει πρώτα πολύ καλή γνώση της γλωσσάς, ιδιαίτερα της C στην οποία αναφερόμαστε σε αυτό το ποστ. Ακόμα κι όταν αποκτηθεί καλή γνώση της γλώσσας, θα πρέπει κατόπιν να εξοικειωθείς με το API ή/και το framework για το οποίο θες να προγραμματίσεις (π.χ. το QT που σου είπαν, είναι framework αλλά προϋποθέτει C++ και όχι C... προφανώς υπάρχουν frameworks και για C, με ένα από τα δημοφιλέστερα το GTK+ που έχει φτάσει στην έκδοση 3.0, αποτελεί μέρος του Gnome Project, είναι γραμμένο σε C αλλά με bindings και για άλλες γλώσσες. Αν σε ενδιαφέρουν αποκλειστικά τα Windows, μια καλή αρχή είναι το Forger's Win32 API Tutorial. 3ον, έχω κατά καιρούς ακούσει πολύ καλά λόγια για τα linux σαν λειτουργικό... Έχουμε Debian στο πανεπιστήμιο και στο σπίτι έχω περάσει τα Ubuntu.. Αλλά δε βλέπω πραγματικά τι παραπάνω έχουν από τα Windows.. Μάλιστα υστερούν σε σχέση με τα Windows από την άποψη ότι δεν υποστηρίζουν πολλές εφαρμογές, όπως παιχνίδια κα... Έχουν τελείως διαφορετική εσωτερική δομή και τρόπο λειτουργίας... σε επίπεδο απλού χρήστη δεν υπάρχουν βασικές διαφορές. 4ον, έχω ακούσει ότι για να δημιουργήσεις κώδικα έχοντας ένα εκτελέσιμο, πρέπει να έχεις γνώσεις αρχιτεκτονικής του υπολογιστή σου.. Ποιές ακριβώς είναι αυτές οι γνώσεις που πρέπει να έχεις; Ο κάθε compiller όταν δημιουργεί ένα εκτελέσιμο, ακριβώς το ίδιο πράγμα δε δημιουργεί για κάθε υπολογιστή; Δηλαδή ένα εκτελέσιμο που δημιουργήθηκε σε έναν υπολογιστή Α δεν τρέχει σε έναν υπολογιστή Β; Αν ναι, τότε τί ακριβώς διαφέρει από σύστημα σε σύστημα; Τρέχει μόνο σε υπολογιστές με το ίδιο λειτουργικό σύστημα, ενίοτε και μόνο σε υπολογιστές με την ίδια έκδοση του ίδιου λειτουργικού συστήματος. Αυτό που διαφέρει από σύστημα σε σύστημα είναι μεταξύ άλλων και η αρχιτεκτονική τους. Και βασικά έχω κι άλλα πολλά πράγματα που δεν καταλαβαίνω αλλά μάλλον θα γίνω κουραστικός αν τα ρωτήσω όλα σ'αυτό το post... Ευχαριστώ πολύ για κάθε απάντηση εκ των προτέρων!! Ρώτα τα όλα, το πολύ-πολύ να αργήσεις να πάρεις απαντήσεις σε όλα
moukoublen Δημοσ. 14 Δεκεμβρίου 2011 Δημοσ. 14 Δεκεμβρίου 2011 Σε σχέση με το πρώτο. Όταν αποθηκεύεις σε ένα αρχείο text data, αποθηκεύονται σαν χαρακτήρες. πχ γραφεις σε ένα αρχείο το string "hi". κάθε χαρακτήρας (Ας πάρουμε τον γενικό κανόνα σύμφωνα με τον ASCII) είναι ένα byte. Όταν αποθηκεύεις το '1' σε ένα text αρχείο δεν αποθηκεύεις έναν αριθμό. Αλλα τον Ascii χαρακτήρα 0x31 η αλλιώς τον (49) σε dec. Αντίστοιχα έτσι διαβάζεται και ένα αρχείο κειμένου, byte-byte (εδώ μπαίνει αστεράκι ανάλογα το encoding αλλα ας μην τα μπλέξουμε). Όταν αποθηκεύεις ένα διάδικο αρχείο αποθηκεύεις σε αυτό ότι θες σε διάδικο επίπεδο. Δηλαδή γράφω ένα byte με τιμή 0xFF και μετά 2 bit με τιμή (01)bin... ότι θέλω όπως θέλω σε επίπεδο bit. Έτσι μπορώ να χρησιμοποιήσω ένα binary αρχείο για να αποθηκεύσω δεδομένα εξοικονομώντας χορό από το να τα αποθηκεύω σε χαρακτήρες (Στην περίπτωση που τα δεδομένα δεν είναι χαρακτήρες). Αυτό φυσικά προϋποθέτει να είναι γνωστό το πως θα διαβαστεί (πως ειναι "γραμμένο") έπειτα αυτό το αρχείο. Τι format έχει ακολουθηθεί. Είναι μια εντελώς custom κατάσταση. τώρα αν εσύ ανοίξεις ένα binary αρχείο και γράψεις 10 χαρακτήρες και μονο, αν πας να το ανοίξεις μετά με text editor, αυτός θα το ανοίξει διαβάζοντας byte-byte (όπως κάνει έτσι κι αλλιώς) και εμφανίζοντας τους αντιστοιχους χαρακτήρες. Επειδή όμως έχεις γράψει μονο χαρακτήρες στη σειρά, σου εμφανίζεται σωστά. ------------------------------ Αν όμως γράψεις σε ένα αρχείο διάδικο τον integer 1730558060 (signed 32bit) θα γραφει στο διάδικο αρχείο η εξής δυαδική ακολουθία >01100111 00100110 00111000 01101100 αν αυτό μετά το ανοίξεις με text editor (μιας και όπως είπαμε ο text editor θα διαβάσει τα data byte-byte και ο integer είναι 4 byte) δε θα δεις τον παραπάνω int. Θα δεις 4 χαρακτήρες g&8l
Erevis Δημοσ. 15 Δεκεμβρίου 2011 Δημοσ. 15 Δεκεμβρίου 2011 Η διαφορά των text με τα binary αρχεία είναι ότι στα text χρησιμοποιούνται μόνο τα 7 από τα 8 bit ενός byte. Στα text πάντα το most significant bit από κάθε byte που γράφεις είναι 0.
defacer Δημοσ. 15 Δεκεμβρίου 2011 Δημοσ. 15 Δεκεμβρίου 2011 1ον, Με προβληματίζει το γεγονός ότι τα δυαδικά αρχεία σε C ( π.χ. δημιουργημένα με fopen( "Filename", "wb") ) όταν τα ανοίξω με notepad δεν είναι καθόλου δυαδικά, δηλαδή διαδοχικά 0 και 1... Μάλιστα φαίνεται να μην έχουν καμία απολύτως διαφορά με τα κανονικά (δημιουργημένα με w)... Ποιά λοιπόν είναι η διαφορά αυτών των 2; Και γιατί να μη χρησιμοποιούμε πάντα το w; Δεν υπάρχει καμία διαφορά πέρα από το πώς μεταφράζονται οι χαρακτήρες line break. Για παράδειγμα, όταν ανοίξεις ένα αρχείο ως text και γράψεις "\n", αν είσαι σε Windows θα γραφτούν δύο bytes, 0x0D και 0x0A (CR + LF). Ενώ αν το ανοίξεις ως binary θα γραφτεί αυτό που του είπες, δηλαδή μόνο το LF (0x0A). Κατά τα άλλα ό,τι και να κάνεις είναι εντελώς το ίδιο, κάτι που μπορείς να διαπιστώσεις και μόνος σου πολύ εύκολα γράφοντας ένα πρόγραμμα. Οι απαντήσεις που λένε κάτι διαφορετικό είναι απλώς λάθος. Παράκληση: αν δεν ξέρετε, μην απαντάτε. Δε χρειάζεται να γεμίζουμε τον κόσμο παραπληροφόρηση. Ευχαριστώ. Αυτό το μπέρδεμα συμβαίνει γιατί διαφορετικά λειτουργικά συστήματα έχουν διαφορετική έννοια του "line terminator" = χαρακτήρας που αντιπροσωπεύει την αλλαγή γραμμής σε αρχεία που υποτίθεται πως περιέχουν κείμενο για "κατανάλωση" από ανθρώπους. Στο unix χρησιμοποιείται το LF (0x0A), σε Mac το CR (0x0D) ενώ σε Windows CR + LF. Τι να κάνεις λοιπόν; Βασικά να ανοίγεις πάντα τα αρχεία σε binary mode, και αν θέλεις όντως να γράψεις CR + LF να το πεις με το όνομά του: "\r\n" (αν δεν το κάνεις και γράψεις μόνο \n, κάποια προγράμματα όπως το Notepad που δεν πολυσκαμπάζουν από διαφορετικά line terminators που λέω παραπάνω θα σου δείξουν το αρχείο σα να είναι όλο μία γραμμή). Είναι λίγο πιο άβολο αλλά φαίνεται καθαρά στον κώδικα τι γράφεις στο αρχείο! 2ον, απ'όσα έχω κάνει μέχρι τώρα στο πανεπιστήμιο, δε μας έχει μιλήσει κανείς για το πως μπορούμε να κάνουμε τα προγράμματά μας γραφικά, πχ να έχουν παράθυρα, που μπορείς να πατήσεις με το ποντίκι κτλ. Ξέρεις κανείς αν υπάρχουν online tutorials για κάτι ανάλογο για C με τα βασικά, για να μπορέσω να ανταπεξέλθω; Ή κάποιο καλό βιβλίο να προτείνει.. Όλα τα σύγχρονα λειτουργικά έχουν interface το οποίο μπορείς να καλέσεις από C για να κάνεις όλα αυτά τα πράγματα, όπως και άπειρα abstraction layers πάνω από αυτό για να το κάνεις με πιο object-oriented προσεγγίσεις. Ο προγραμματισμός με τέτοιο UI απαιτεί να καταλάβεις ότι στην ουσία το πρόγραμμά σου κάποια στιγμή θα μπει σε ένα endless loop (ονομάζεται message loop ή message pump), μέσα στο οποίο κάθε φορά το λειτουργικό θα σου λέει αν έχεις κάποιο "μήνυμα" το οποίο πρέπει να επεξεργαστείς (π.χ. "ο χρήστης έκανε κλικ στο τάδε σημείο του παραθύρου σου"). Για τα Windows η βίβλος είναι το βιβλίο του Petzold, με το οποίο θα παιδευτείς πολύ αλλά θα μάθεις πως έχουν τα πράγματα "κάτω από το καπό". Προσοχή είναι τεράστιο (1500 σελίδες). 3ον, έχω κατά καιρούς ακούσει πολύ καλά λόγια για τα linux σαν λειτουργικό... Έχουμε Debian στο πανεπιστήμιο και στο σπίτι έχω περάσει τα Ubuntu.. Αλλά δε βλέπω πραγματικά τι παραπάνω έχουν από τα Windows.. Μάλιστα υστερούν σε σχέση με τα Windows από την άποψη ότι δεν υποστηρίζουν πολλές εφαρμογές, όπως παιχνίδια κα... Αυτό είναι από τα πράγματα που δεν μπορεί κάποιος να σου εξηγήσει αν δεν το νιώσεις μόνος σου. Κατά τα άλλα: open source. 4ον, έχω ακούσει ότι για να δημιουργήσεις κώδικα έχοντας ένα εκτελέσιμο, πρέπει να έχεις γνώσεις αρχιτεκτονικής του υπολογιστή σου.. Ποιές ακριβώς είναι αυτές οι γνώσεις που πρέπει να έχεις; Ο κάθε compiller όταν δημιουργεί ένα εκτελέσιμο, ακριβώς το ίδιο πράγμα δε δημιουργεί για κάθε υπολογιστή; Δηλαδή ένα εκτελέσιμο που δημιουργήθηκε σε έναν υπολογιστή Α δεν τρέχει σε έναν υπολογιστή Β; Αν ναι, τότε τί ακριβώς διαφέρει από σύστημα σε σύστημα; Φυσικά και όχι! Διαφέρουν πάρα μα πάρα πολλά πράγματα, τα οποία δε νομίζω ότι μπορείς να καταλάβεις σε βάθος στο επίπεδο που βρίσκεσαι. Θα σου πώ ένα απλό: στην τελική το εκτελέσιμο είναι κώδικας μηχανής, τα bytes του οποίου αντιπροσωπεύουν λειτουργίες που εκτελείς πάνω στα διάφορα υποσυστήματα του επεξεργαστή ας πούμε. Εφόσον διαφορετικοί επεξεργαστές έχουν τελείως διαφορετική δομή (αυτό είναι που λέμε system architecture), είναι προφανές ότι θα διαφέρει όχι μόνο το σύνολο των λειτουργιών που υποστηρίζουν αλλά φυσικά και η αντιστοίχιση από "αριθμούς" bytes σε εντολές που θέλεις να εκτελεστούν. Επομένως δεν είναι ποτέ δυνατόν να δώσεις κώδικα μηχανής που απευθύνεται σε x86 και να περιμένεις από έναν επεξεργαστή ARM αρχιτεκτονικής να τον τρέξει. Θα ήταν χοντρικά σα να δώσεις ένα αρχείο που έσωσες π.χ. στο Photoshop για άνοιγμα από το π.χ. Paint των Windows και να περιμένεις να το ανοίξει και να δεις τα ίδια πράγματα που θα έβλεπες και στο Photoshop.
nilosgr Δημοσ. 15 Δεκεμβρίου 2011 Δημοσ. 15 Δεκεμβρίου 2011 Καλησπέρα σας.. Θα ήθελα να κάνω μερικές ερωτήσεις.. 1ον, Με προβληματίζει το γεγονός ότι τα δυαδικά αρχεία σε C ( π.χ. δημιουργημένα με fopen( "Filename", "wb") ) όταν τα ανοίξω με notepad δεν είναι καθόλου δυαδικά, δηλαδή διαδοχικά 0 και 1... Μάλιστα φαίνεται να μην έχουν καμία απολύτως διαφορά με τα κανονικά (δημιουργημένα με w)... Ποιά λοιπόν είναι η διαφορά αυτών των 2; Και γιατί να μη χρησιμοποιούμε πάντα το w; 2ον, απ'όσα έχω κάνει μέχρι τώρα στο πανεπιστήμιο, δε μας έχει μιλήσει κανείς για το πως μπορούμε να κάνουμε τα προγράμματά μας γραφικά, πχ να έχουν παράθυρα, που μπορείς να πατήσεις με το ποντίκι κτλ. Ξέρεις κανείς αν υπάρχουν online tutorials για κάτι ανάλογο για C με τα βασικά, για να μπορέσω να ανταπεξέλθω; Ή κάποιο καλό βιβλίο να προτείνει.. 3ον, έχω κατά καιρούς ακούσει πολύ καλά λόγια για τα linux σαν λειτουργικό... Έχουμε Debian στο πανεπιστήμιο και στο σπίτι έχω περάσει τα Ubuntu.. Αλλά δε βλέπω πραγματικά τι παραπάνω έχουν από τα Windows.. Μάλιστα υστερούν σε σχέση με τα Windows από την άποψη ότι δεν υποστηρίζουν πολλές εφαρμογές, όπως παιχνίδια κα... 4ον, έχω ακούσει ότι για να δημιουργήσεις κώδικα έχοντας ένα εκτελέσιμο, πρέπει να έχεις γνώσεις αρχιτεκτονικής του υπολογιστή σου.. Ποιές ακριβώς είναι αυτές οι γνώσεις που πρέπει να έχεις; Ο κάθε compiller όταν δημιουργεί ένα εκτελέσιμο, ακριβώς το ίδιο πράγμα δε δημιουργεί για κάθε υπολογιστή; Δηλαδή ένα εκτελέσιμο που δημιουργήθηκε σε έναν υπολογιστή Α δεν τρέχει σε έναν υπολογιστή Β; Αν ναι, τότε τί ακριβώς διαφέρει από σύστημα σε σύστημα; Και βασικά έχω κι άλλα πολλά πράγματα που δεν καταλαβαίνω αλλά μάλλον θα γίνω κουραστικός αν τα ρωτήσω όλα σ'αυτό το post... Ευχαριστώ πολύ για κάθε απάντηση εκ των προτέρων!! Ρωτα και κανα καθηγητη σου, σιγουρα ξερει να σου απαντησει σε ολα...
moukoublen Δημοσ. 15 Δεκεμβρίου 2011 Δημοσ. 15 Δεκεμβρίου 2011 Δεν υπάρχει καμία διαφορά πέρα από το πώς μεταφράζονται οι χαρακτήρες line break. Ναι ok. Μπορείς να εφαρμόσεις το binary "api" (fread,fwrite) σε αρχεία που δε τα άνοιξες ως binary και τούμπαλιν. Δεν παίζει κανένα ρόλο πώς έχεις ανοίξει το αρχείο. Πάντως άλλο πράγμα να γραφεις δυαδικά στο αρχείο σου τα data και άλλο πράγμα να γραφεις text όπως προσπάθησα να εξηγήσω παραπάνω. και συγκεκριμένα από τι στιγμή που διάβασα αυτό ... όταν τα ανοίξω με notepad δεν είναι καθόλου δυαδικά, δηλαδή διαδοχικά 0 και 1... ... θεώρησα ότι μάλλον χρειάζεται μια σαφή εικόνα του τι εστί εννοιολογικά διάδικο αρχείο και τι text.
migf1 Δημοσ. 15 Δεκεμβρίου 2011 Δημοσ. 15 Δεκεμβρίου 2011 Δεν υπάρχει καμία διαφορά πέρα από το πώς μεταφράζονται οι χαρακτήρες line break. Για παράδειγμα, όταν ανοίξεις ένα αρχείο ως text και γράψεις "\n", αν είσαι σε Windows θα γραφτούν δύο bytes, 0x0D και 0x0A (CR + LF). Ενώ αν το ανοίξεις ως binary θα γραφτεί αυτό που του είπες, δηλαδή μόνο το LF (0x0A). Κατά τα άλλα ό,τι και να κάνεις είναι εντελώς το ίδιο, κάτι που μπορείς να διαπιστώσεις και μόνος σου πολύ εύκολα γράφοντας ένα πρόγραμμα. Οι απαντήσεις που λένε κάτι διαφορετικό είναι απλώς λάθος. Δεν είναι μόνο αυτό, σε μερικές πλατφόρμες μπαίνει κι ένα eof marker στο τέλος των text αρχείων (στα binary δεν μπαίνει ποτέ).
defacer Δημοσ. 15 Δεκεμβρίου 2011 Δημοσ. 15 Δεκεμβρίου 2011 Ναι ok. Μπορείς να εφαρμόσεις το binary "api" (fread,fwrite) σε αρχεία που δε τα άνοιξες ως binary και τούμπαλιν. Δεν παίζει κανένα ρόλο πώς έχεις ανοίξει το αρχείο. Ναι, σωστός. Απλά το "api mode" που λες και το file open mode που ρώτησε το παιδί είναι ορθογώνια μεταξύ τους. Όπως και να χει βέβαια άλλα ήταν αυτά που είδα να γράφονται και συγχίστηκα...
migf1 Δημοσ. 15 Δεκεμβρίου 2011 Δημοσ. 15 Δεκεμβρίου 2011 Δεν είναι μόνο αυτό, σε μερικές πλατφόρμες μπαίνει κι ένα eof marker στο τέλος των text αρχείων (στα binary δεν μπαίνει ποτέ). Καθώς επίσης πως αν διαβάζεις text αρχείο η ανάγνωση σταματάει στο 1ο eof character που θα βρει, ακόμα κι αν δεν σταματάνε εκεί τα data του αρχείου... κάτι που προφανώς δεν συμβαίνει σε binary-mode ( Ctrl-Z, Ctrl-D είναι μερικοί συχνά χρησιμοποιούμενοι eof characters ). ΥΓ. Ένα-ένα μου έρχονται
Genevil Δημοσ. 15 Δεκεμβρίου 2011 Μέλος Δημοσ. 15 Δεκεμβρίου 2011 Ευχαριστώ πολύ για όλες τις απαντήσεις Ρωτα και κανα καθηγητη σου, σιγουρα ξερει να σου απαντησει σε ολα... Ναι δε διαφωνώ, αλλά τα περισσότερα είναι έξω από τα πλαίσια του μαθήματος.. Δε μου βγαίνει πολύ ωραία να πιάσω κουβέντα με τον καθηγητή, θα νομίζει κανείς ότι πάω να γλύψω Γενικά όμως θέλω να έχω μια πιο σφαιρική άποψη των πραγμάτων... Sorry αν σε κουράζω πολύ... Φυσικά και όχι! Διαφέρουν πάρα μα πάρα πολλά πράγματα, τα οποία δε νομίζω ότι μπορείς να καταλάβεις σε βάθος στο επίπεδο που βρίσκεσαι. Θα σου πώ ένα απλό: στην τελική το εκτελέσιμο είναι κώδικας μηχανής, τα bytes του οποίου αντιπροσωπεύουν λειτουργίες που εκτελείς πάνω στα διάφορα υποσυστήματα του επεξεργαστή ας πούμε. Εφόσον διαφορετικοί επεξεργαστές έχουν τελείως διαφορετική δομή (αυτό είναι που λέμε system architecture), είναι προφανές ότι θα διαφέρει όχι μόνο το σύνολο των λειτουργιών που υποστηρίζουν αλλά φυσικά και η αντιστοίχιση από "αριθμούς" bytes σε εντολές που θέλεις να εκτελεστούν. Επομένως δεν είναι ποτέ δυνατόν να δώσεις κώδικα μηχανής που απευθύνεται σε x86 και να περιμένεις από έναν επεξεργαστή ARM αρχιτεκτονικής να τον τρέξει. Οι τύποι επεξεργαστών είναι 3, αν έχω καταλάβει καλά.. οι x32, x64 , x86 (ανεξάρτητα κατασκευαστικής εταιρείας) (Δεν έχω ιδέα τι είναι ο ARM) Άρα γιατί είναι τόσο δύσκολο γι αυτούς τους τύπους και για τα πιο δημοφιλή λειτουργικά (πχ Windows, linux) να φτυαχτούν κατάλληλα προγράμματα που κάνουν αυτή τη δουλειά; Όλα τα σύγχρονα λειτουργικά έχουν interface το οποίο μπορείς να καλέσεις από C για να κάνεις όλα αυτά τα πράγματα, όπως και άπειρα abstraction layers πάνω από αυτό για να το κάνεις με πιο object-oriented προσεγγίσεις. Ο προγραμματισμός με τέτοιο UI απαιτεί να καταλάβεις ότι στην ουσία το πρόγραμμά σου κάποια στιγμή θα μπει σε ένα endless loop (ονομάζεται message loop ή message pump), μέσα στο οποίο κάθε φορά το λειτουργικό θα σου λέει αν έχεις κάποιο "μήνυμα" το οποίο πρέπει να επεξεργαστείς (π.χ. "ο χρήστης έκανε κλικ στο τάδε σημείο του παραθύρου σου"). Για τα Windows η βίβλος είναι το βιβλίο του Petzold, με το οποίο θα παιδευτείς πολύ αλλά θα μάθεις πως έχουν τα πράγματα "κάτω από το καπό". Προσοχή είναι τεράστιο (1500 σελίδες). Κατατοπιστικότατος! Αλλά κοστίζει κάμποσα αυτό το βιβλίο, κι επίσης δεν παίζει να το βρω σε βιβλιοπωλείο.. Εναλλακτική;
V.I.Smirnov Δημοσ. 15 Δεκεμβρίου 2011 Δημοσ. 15 Δεκεμβρίου 2011 To θέμα του γραφικού περιβάλλοντος έχει συζητηθεί επανειλημμένως εδώ μέσα. Π.χ. εδώ δίνονται στα γρήγορα κάποιες υποδείξεις : http://www.insomnia.gr/topic/426598-%ce%b3%cf%81%ce%b1%cf%86%ce%b9%ce%ba%ce%ac-%cf%83%ce%b5-visual-c/page__p__4392210__hl__petzold__fromsearch__1#entry4392210 Eιδικά για το βιβλίο του Petzold, δεν είναι δύσκολο να το βρεις (π.χ. μεταχειρισμένο) αλλά τη σημερινή εποχή αποτελεί πολύ κακή επιλογή για εκμάθηση γραφικού interface. Καλύτερoς δρόμος είναι να μάθεις τα βασικά της C++ και να πιάσεις την Qt ή το GTK+ ή κάτι παρόμοιο. Εν πάση περιπτώση, η κατασκευή γραφικού περιβάλλοντος στις C/C++ είναι γενικά μπελάς, χρονοβόρα και δεν αφορά τον πολύ κόσμο. Το βασικό για τους περισσότερους είναι η επίλυση του καθεαυτού προβλήματος. Η δαπάνη πολύ χρόνου για την εκμάθηση ενός api γραφικών ή το γραφικό στήσιμο του προγράμματος δεν δικαιολογείται στα συνήθη διδακτικά πλαίσια. Με άλλα λόγια, είναι πολύ πιο επωφελές π.χ. να μελετήσεις ένα θέμα αριθμητικής ανάλυσης ή αλγοριθμικής παρά να δεις πώς θα χειρίζεσαι το ποντίκι ή τα μενού... Πέραν τούτων, για όποιον θέλει σώνει και καλά γραφική φορεσιά στο πρόγραμμά του, υπάρχουν βιβλία εξαιρετικά που διδάσκουν εξαρχής (για τελείως αρχάριους) την C++ σε συνδυασμό με την Qt. Προτείνω μια τέτοια προσέγγιση - δεν είναι υπερβολικά χρονοβόρα (τουλάχιστον για τα βασικά) και έχει σίγουρο αποτέλεσμα. Τέλος, επισημαίνω ότι η αρχική διατύπωση του τελευταίου ερωτήματος ήταν "για να δημιουργήσεις κώδικα έχοντας ένα εκτελέσιμο, πρέπει να έχεις γνώσεις αρχιτεκτονικής του υπολογιστή σου.." Όντας έτσι διατυπωμένο, αφορά το reverse engineering κι όχι το αν και πού τρέχει το εκτελέσιμο... -
nilosgr Δημοσ. 15 Δεκεμβρίου 2011 Δημοσ. 15 Δεκεμβρίου 2011 Ναι δε διαφωνώ, αλλά τα περισσότερα είναι έξω από τα πλαίσια του μαθήματος.. Δε μου βγαίνει πολύ ωραία να πιάσω κουβέντα με τον καθηγητή, θα νομίζει κανείς ότι πάω να γλύψω Γενικά όμως θέλω να έχω μια πιο σφαιρική άποψη των πραγμάτων... Sorry αν σε κουράζω πολύ... Τα παντα ειναι στα πλαισια του μαθηματος και επισης, αυτα για τα γλειψηματα τα λενε οι κομπλεξικοι και ΤΟΥΣ ΓΡΑΦΩ ΣΤΑ ΑΙΔΙΧΡΑ<- ΜΟΥ!!! το ιδιο σε συμβουλευω κι εσενα να κανεις
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα