Προς το περιεχόμενο

Ανακατεύθυνση


firewalker

Προτεινόμενες αναρτήσεις

Έχω ένα πρόγραμμα κονσόλας στο οποίο δεν λειτουργεί η ανακατεύθυνση. Εξηγούμαι:

 

Δίνω program_name -arguments > text.txt Η έξοδος του προγράμματος εμφανίζεται στην οθόνη αλλά το αρχείο που δημιουργείται είναι άδειο.

 

Στον κώδικα του προγράμματος είδα ότι για να τυπώνει χρησιμοποιεί την εντολή

 

fprintf(stderr, "message \n");.

 

Αν την αλλάξω σε

 

fprintf(stdout, "message \n");

 

και το κάνω compille τότε η ανακατεύθυνση λειτουργεί κανονικά. Υπάρχει τρόπος με συνδυασμό εντολών να δουλέψει η ανακατεύθυνση χωρίς να πειράξω όλο τον κώδικα (είναι λίγο μεγάλος...);

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Κάθε πρόγραμμα ανοίγει κάποια αρχεία, στα οποία αποδίδονται αριθμοί (file descriptors). Οι file descriptors 1 και 2 αντιστοιχούν πάντοτε στην stdout και την stderr, αντίστοιχα. H stdout είναι η standard output, δηλαδή η κανονική έξοδος του προγράμματος με αυτά που θες να δεις, και το '> text.txt' ισοδυναμεί με '1>text.txt'. Η stderr (ή standard error) από την άλλη είναι για να γράφει το πρόγραμμα τα μηνύματα λάθους (κυρίως) ώστε, ακόμα και αν κάνει κάπου redirect ο χρήστης την έξοδο, αφενός να βλέπει ακόμα τα μηνύματα αν κάτι πάει στραβά, αφετέρου να μην του «μολύνουν» να μηνύματα λάθους την έξοδο του προγράμματός του. Το 2>&1 λοιπόν κάνει redirect την stderr στην stdout, οπότε και τα μηνύματα λάθους γράφονται τελικά στο text.txt. Για περισσότερες πληροφορίες: http://tldp.org/LDP/abs/html/io-redirection.html

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...