[Powered by Google Translate] TOMMY: Σε αυτό το βίντεο, θα μάθετε για αναπροσανατολισμό και σωλήνες. Μέχρι στιγμής, έχουμε χρησιμοποιώντας λειτουργίες όπως η printf να δεδομένα εξόδου στο τερματικό και λειτουργίες όπως GetString να επιτρέπουν στο χρήστη να συνεισφέρουν μας πρόγραμμα χρησιμοποιώντας το πληκτρολόγιο. Ας ρίξουμε μια ματιά γρήγορα σε ένα πρόγραμμα που παίρνει μια γραμμή του είσοδο από τον χρήστη και στη συνέχεια να εξάγει. On line 7, είμαστε προτρέποντας τον χρήστη για μια σειρά, και στη συνέχεια, στη γραμμή 8, είμαστε το πίσω από την εκτύπωση. Ας μεταγλώττιση και εκτέλεση του προγράμματος μας. Μεγάλη. Η σειρά που παρέχεται αυτή επαναλήφθηκε πίσω μας στο τερματικό. Αυτό συνέβη επειδή η printf λειτουργία έγραψε σε ένα ρεύμα που ονομάζεται πρότυπο έξω, ή s-t-d-out. Όταν κάτι γράφεται στην κανονική έξοδο, είναι από προεπιλογή εμφανίζεται από το τερματικό. Έτσι, αυτό είναι όλα ωραία και καλά, αλλά τι θα γινόταν αν, αντί απλώς να εμφανίζει τη συμβολοσειρά, θέλαμε να το αποθηκεύσετε σε ένα αρχείο; Για παράδειγμα, θα μπορούσαμε να θέλουμε να θυμόμαστε ακριβώς τι μας πρόγραμμα έκανε όταν δώσαμε μια ιδιαίτερη είσοδο αργότερα. Μια προσέγγιση θα ήταν να το κάνετε αυτό στο Γ πρόγραμμα μας, με τη χρήση κάποιες ειδικές λειτουργίες για το γράψιμο σε αρχεία που θα δείτε σε ένα άλλο βίντεο. Ακόμα πιο εύκολο, όμως, θα είναι με κάποιο τρόπο να ανακατεύθυνσης stdout σε ένα αρχείο. Με αυτόν τον τρόπο, όταν printf γράφει στο stdout, και τα περιεχόμενα θα να καταγράφονται σε ένα αρχείο και όχι εμφανίζεται από το τερματικό. Μπορούμε να κάνουμε ακριβώς ότι με την προσθήκη μια μεγαλύτερη-από το σύμβολο, ακολουθούμενο από το όνομα του αρχείου, με την εντολή που χρησιμοποιούμε για να εκτελέσει το πρόγραμμά μας. Έτσι, όχι απλώς την εκτέλεση. / Redirect, μπορούμε να τρέξει. / ανακατεύθυνσης, ακολουθούμενη από μία μεγαλύτερη από σύμβολο, ακολουθούμενο από αρχείου, όπως file.txt. Ας δούμε τι θα συμβεί. OK. Σημειώστε ότι αυτή τη φορά, τίποτα δεν εμφανίζεται στο τερματικό, αλλά δεν έχουμε τροποποιήσει τα περιεχόμενα του μας C πρόγραμμα καθόλου. Ας εξετάσουμε τώρα τα περιεχόμενα αυτού του καταλόγου με ls. Εντάξει. Έχουμε τώρα ένα νέο αρχείο στον κατάλογο μας ονομάζεται file.txt, το οποίο είναι το όνομα του αρχείου που παρέχονται όταν τρέξαμε μας Ανακατεύθυνση πρόγραμμα. Ας ανοίξει file.txt. Και εδώ, μπορούμε να δούμε ότι η stdout από ανακατευθύνει ήταν γράφονται στο αρχείο που ονομάζεται file.txt. Ας τρέξει την προηγούμενη εντολή και πάλι, αλλά παρέχει μια διαφορετικές εισόδου αυτή τη φορά. Εντάξει. Ας ρίξουμε μια ματιά σε file.txt τώρα. Μπορούμε να δούμε εδώ ότι το αρχείο έχει αντικατασταθεί, έτσι μας αρχικής εισόδου δεν είναι πια εκεί. Αν αντί θέλετε να προσθέσετε σε αυτό το αρχείο, βάζοντας το νέο εισόδου κάτω από τα υπάρχοντα περιεχόμενα του αρχείου, μπορούμε να χρησιμοποιήσετε δύο μεγαλύτερες-από σημάδια και όχι μόνο ένα. Ας το δοκιμάσουμε. Τώρα, αν ανοίξουμε file.txt πάλι, μπορούμε να δούμε και τα δύο μας γραμμές εισόδου. Σε ορισμένες περιπτώσεις, μπορεί να θέλετε να απορρίψετε κάθε έξοδος του προγράμματός μας. Αντί γραπτώς την έξοδο σε ένα αρχείο και στη συνέχεια διαγραφή το αρχείο όταν τελειώσετε με αυτό, μπορούμε να γράψουμε ένα σε ειδικές αρχείο με όνομα / dev / null. Όταν κάτι είναι γραμμένο σε / dev/null-- ή απλά devnull για σύντομο - αυτομάτως απορρίπτεται. Έτσι σκέφτονται devnull ως μια μαύρη τρύπα για τα δεδομένα σας. Μέχρι τώρα έχουμε δει πως η μεγαλύτερη από ό, τι σημάδι μπορεί να ανακατευθύνει stdout, ας δούμε πώς μπορούμε να ανακατευθύνει στο πρότυπο - ή s-τ-ά-σε - το ανάλογο stdout. Ενώ λειτουργίες όπως printf γράφουν στο ρεύμα που ονομάζεται stdout, GetString και παρόμοιες λειτουργίες ανάγνωσης από το ρεύμα που ονομάζεται stdin, η οποία, εξ ορισμού, είναι το ρεύμα της χαρακτήρες πληκτρολογούνται στο πληκτρολόγιο. Μπορούμε να ανακατευθύνει stdin χρησιμοποιώντας το μικρότερο σημάδι, ακολουθούμενη από ένα όνομα αρχείου. Τώρα, αντί να ζητά από το χρήστη για την είσοδο σε ο τερματικό, ένα πρόγραμμα θα ανοίξει το αρχείο που καθορίζεται και χρήση γραμμές του σαν είσοδο. Ας δούμε τι θα συμβεί. Μεγάλη. Η πρώτη γραμμή του file.txt έχει τυπωθεί στο τερματικό επειδή είμαστε καλώντας GetString φορά. Αν είχαμε μια άλλη κλήση σε GetString στο πρόγραμμά μας, το επόμενη γραμμή file.txt θα είχαν χρησιμοποιηθεί ως εισόδου στην εν λόγω πρόσκληση. Και πάλι, δεν έχουμε τροποποιημένο πρόγραμμα C μας σε όλα. Είμαστε μόνο αλλάζουν τον τρόπο να τρέξει. Και να θυμάστε, επίσης, δεν έχουμε ανακατεύθυνση stdout αυτή τη φορά, έτσι ώστε η έξοδος του προγράμματος ήταν ακόμη εμφανίζεται στο τερματικό. Μπορούμε, βέβαια, να κατευθύνει τόσο stdin και stdout σαν αυτό. Τώρα, file2.txt περιέχει την πρώτη γραμμή του file.txt. Έτσι, με τη χρήση αυτών των φορέων, είμαστε σε θέση να διαβάζουν και να γράψετε από αρχεία κειμένου. Τώρα, ας δούμε πώς μπορούμε να χρησιμοποιήσουμε την έξοδο ενός προγράμματος, όπως η είσοδος σε ένα άλλο πρόγραμμα. Έτσι, εδώ είναι ένα άλλο απλό πρόγραμμα Γ Ι έχουν ζητήσει εδώ hello.c. Όπως μπορείτε να δείτε, αυτό εξάγει απλά "Γεια εκεί! "στο χρήστη. Αν θέλω να ανακατευθύνει χρησιμοποιούν ως είσοδο την έξοδο του γειά σου - ένα άλλο πρόγραμμα - Θα μπορούσα να ανακατευθύνει πρώτα το stdout του γειά σου σε ένα αρχείο που ονομάζεται input.txt, ανακατευθύνει στη συνέχεια το stdin της ανακατευθύνει στην ίδια αρχείο - INPUT.TXT. Έτσι, μπορώ να κάνω. / Γεια> INPUT.TXT. Πατήστε το πλήκτρο Enter για να εκτελέσει αυτό. Ακολούθησε. / Redirect < INPUT.TXT, ότι και να εκτελέσει. Έτσι, μπορούμε να συντομεύσουμε αυτό το λίγο με ένα ερωτηματικό, το οποίο επιτρέπει μας να τρέξει δύο ή περισσότερες εντολές στην ίδια γραμμή. Έτσι, μπορώ να πω,. / Γειά σου> input.txt, ερωτηματικό, . / Redirect Final.txt. Έτσι, αν έχουμε ανοίξει final.txt, έχουμε ακριβώς αυτό που ήταν ψάχνουν για: μια λίστα με μοναδικά ονόματα σε αλφαβητική σειρά, αποθηκεύονται σε ένα αρχείο κειμένου. Με τον τρόπο αυτό, θα μπορούσε επίσης να πει είδος < students.txt | uniq> final.txt να κάνει ακριβώς το ίδιο πράγμα, με κάθε μία από τις επιχειρήσεις που έχουμε δει σε αυτό το βίντεο. Το όνομά μου είναι ο Tommy, και αυτό είναι CS50.