pagratios Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 Μπορεί κάποιος να μου εξηγήσει τα pipes? Όταν ας πούμε κάνουμε την ls| sort τρέχει πρώτα την ls το απότέλεσμα της στην fd[write] και μετά παίρνει η sort από την fd[read] και βγάζεις το αποτέλεσμα στην stdout! Όπως έγραψα παραπάνω λειτουργεί ή κάνω λάθος? Βασικά θέλω να μάθω αν πρέπει να τελειώσει η ls για να αρχίσει η sort ή αν γίνεται παράλληλα! Ευχαριστώ εκ το προτέρον Αν το θέμα είναι σε άλλη κατηγορία παρακαλώ να το αλλάξουν οι διαχειριστές.
ippo00 Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 Τελιώνει το ένα και μετά κάνει το άλλο. Το pipe() είναι κάτι άλλο αν κοιτούσες αυτό. Οπότε ναι, input από stdin και output στο out. Άν κάτι δεν θες να περάσει από το pipe το βγάζεις στο stderr. Έχει πλάκα που δίνεις δικαιώματα στους διαχειρηστές που ήδη γνωρίζουν ότι έχουν.
pagratios Δημοσ. 24 Ιουνίου 2009 Μέλος Δημοσ. 24 Ιουνίου 2009 Μπορεί κάποιος να μου εξηγήσει τα pipes? Όταν ας πούμε κάνουμε την ls| sort τρέχει πρώτα την ls το απότέλεσμα της στην fd[write] και μετά παίρνει η sort από την fd[read] και βγάζεις το αποτέλεσμα στην stdout! Όπως έγραψα παραπάνω λειτουργεί ή κάνω λάθος? Βασικά θέλω να μάθω αν πρέπει να τελειώσει η ls για να αρχίσει η sort ή αν γίνεται παράλληλα! Ευχαριστώ εκ το προτέρον Αν το θέμα είναι σε άλλη κατηγορία παρακαλώ να το αλλάξουν οι διαχειριστές.
pagratios Δημοσ. 24 Ιουνίου 2009 Μέλος Δημοσ. 24 Ιουνίου 2009 Βασικά μου είπανε ότι τρέχουν παράλληλα η ls και η sort στο ls | sort, είναι λάθος αυτό? Τα UNIX σε τι γλώσσα είναι προγραμματισμένα!
ippo00 Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 Είναι λάθος. Το core κομμάτι κυρίως σε C. Google.
GrandGamer Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 Πρώτα τρέχει η ls και δίνει το output στην sort αντί για το stdout. Όλα τα λειτουργικά εδώ και χρόνια γράφονται σε C.
Wise_One Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 Το pipelining γίνεται παράλληλα, είμαι 99% σίγουρος γι' αυτό. Μας το είπανε στη σχολή. Ελπίζω να μην έχω ξεχάσει τόσο εύκολα... Την ώρα που εκτελείται μια εντολή, τροφοδοτεί την επόμενη και πάει λέγοντας... Δες τις πρώτες 2 σειρές link Μάλλον δεν είδα τ' ότι υπάρχουν 2 threads. Και προφανώς έδωσα λάθος απάντηση...
pagratios Δημοσ. 24 Ιουνίου 2009 Μέλος Δημοσ. 24 Ιουνίου 2009 Το pipelining γίνεται παράλληλα, είμαι 99% σίγουρος γι' αυτό. Μας το είπανε στη σχολή. Ελπίζω να μην έχω ξεχάσει τόσο εύκολα... Την ώρα που εκτελείται μια εντολή, τροφοδοτεί την επόμενη και πάει λέγοντας... Δες τις πρώτες 2 σειρές link Μάλλον δεν είδα τ' ότι υπάρχουν 2 threads. Και προφανώς έδωσα λάθος απάντηση... τι έχεται να πείται για αυτό. Το άνοιξα 2 φορές και ο φίλος απάντησε αλλού
pagratios Δημοσ. 24 Ιουνίου 2009 Μέλος Δημοσ. 24 Ιουνίου 2009 Αυτό τι είναι ls | sort ή το ls | wv ή το ls | grep a | head? Αυτά με ενδιαφέρουν
GrandGamer Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 Μπερδεύεις τον χαρακτήρα pipe με την συνάρτηση pipe. Έχουν το ίδιο όνομα γιατί μοιάζουν σε αυτό που κάνουν, interprocess communication, αλλά δεν είναι το ίδιο. Ο χαρακτήρας κάνει αυτό που σου είπα, δηλαδή δίνει το output μίας διεργασίας ως input σε μία άλλη, το άλλο pipe άσ' το.
pagratios Δημοσ. 24 Ιουνίου 2009 Μέλος Δημοσ. 24 Ιουνίου 2009 Βασικά σε μία εργασία έφτιαξα ένα shell με και όταν μου δίναναι το ls | sort εκτελούσα την pipe(). Κάποιο από τα 2 εκττελείται παράλληλα ή και στα 2 τελειώνει η πρώτη εντολή και παίρνει στην είσοδο η δεύτερη εντολή τα αποτελέσματα της πρώτης?
GrandGamer Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 pipe() σε shell script δεν ξέρω. Αν εννοείς την pipe() στη C τότε δεν κάνει τίποτα από τα 2, απλά είναι ένα μέσο για να εποικοινωνίσουν 2 διεργασίες.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.