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

Εκτέλεση εντολών με ανακαταθεύνση εισόδου/εξοδου με τις exec() της c


profitis

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

Δημοσ.

Προσπαθώ να φτιάξω ένα δικό μου command prompt σε linux.Μέσα απ αυτο πρέπει να εκτελείται οποιαδήποτε εντολή συστήματος η εκτελέσιμο.

 

 

Στο μάθημα μας είπανε να χρησιμοποιήσουμε την οικογένεια συναρτήσεων exec. Απ αυτές η execvp ειναι και που βολεύει και που δουλεύει για όλα τα προγράμματα και για όλες τις εντολές.Δεν υποστηρίζει όμως ανακαταθεύνση εισόδου/εξόδου.

 

Οι άλλες εντολές,η execve ,execl κτλ υποστηρίζουν ανακατεύθυνση;

 

Σας ευχαριστώ

Δημοσ.
Προσπαθώ να φτιάξω ένα δικό μου command prompt σε linux.Μέσα απ αυτο πρέπει να εκτελείται οποιαδήποτε εντολή συστήματος η εκτελέσιμο.

 

 

Στο μάθημα μας είπανε να χρησιμοποιήσουμε την οικογένεια συναρτήσεων exec. Απ αυτές η execvp ειναι και που βολεύει και που δουλεύει για όλα τα προγράμματα και για όλες τις εντολές.Δεν υποστηρίζει όμως ανακαταθεύνση εισόδου/εξόδου.

 

Οι άλλες εντολές,η execve ,execl κτλ υποστηρίζουν ανακατεύθυνση;

 

Σας ευχαριστώ

Kitaxe thn popen etc opos anigeis kapio arxeio etc mporeis na anixeis kai thn exodo mias diergasias .Telospanton psakse gia ta pipes an thes na matheis kati parapanw kai na xrisimopoieis thn execve .... Alla pisteuw h popen einai auto pou xreiazesai ,kai den tha xreiasteis thn execve ;) .

Δημοσ.

Όχι οι execve, execl κτλ δεν υποστηρίζουν αυτό που θες. Μείνε στην execvp που βολεύει περισσότερο..

 

Για ανακατεύθυνση δοκίμασε την dup2 ..

 

Συγκεκριμένα με :

dup2(input_file, STDIN_FILENO);

κάνεις ανακατεύθυνση το stdin στο Input file. Δεν χρειάζεται κάτι παραπάνω. Γίνεται αυτόματα!

 

Ομοίως :

dup2(output_file, STDOUT_FILENO);

 

Όπου Input και output files είναι αρχεία που έχεις ανοίξει με την open.. (και χρησιμοποιώντας τα κατάλληλα ορίσματα για εγγραφή/δημιουργία αν δεν υπάρχει το αρχείο..)

 

Τέλος πρόσεξε να κάνεις Include το κατάλληλο header για να σου αναγνωρίζει τα STDIN_FILENO, STDOUT_FILENO και να μην πετάει error.

 

Καλή συνέχεια !

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

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

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