DarkSaga Δημοσιεύτηκε Ιανουάριος 14, 2010 #1 Δημοσιεύτηκε Ιανουάριος 14, 2010 ερώτηση κρίσεως...θέλω σε μια εφαρμογή server client(linux)να εκτελώ εντολές που μου έρχοντι από τον client κάνω τα διάφορα και επέλεξα(σωστά ή όχι δεν ξέρω) να της στείλω προς εκτέλεση με popen πως μπορώ να διαβάσω το stderr της popen και να το ανακατευθύνω σε ένα αρχείο χρήστη? err_log πoυ έχω?το std_out το έχω διαβάσει και ανακατευθύνει σωστά μπορώ ταυτόχρονα να πάρω και std_err???καμια πρόταση?από τους βοηθούς (πρόκειται για εργασία που λήγει αύριο ,καλό?) είχε δοθεί σε άλλο συνάδελφο η απάντηση εκτελέστε με bash αλλά δεν το έπιασα και όσο κι αν googliσα σε κάτι άκυρα κατέληξα για bash scripting :giveup:
Jaco Ιανουάριος 19, 2010 #2 Ιανουάριος 19, 2010 Υπάρχουν πολλοί τρόποι να το κάνεις αυτό που θες...1. Χρησιμοποιείς την popen με pipes για το κάθε standard i/o, που θέλεις...2. Χρησιμοποιείς την popen, αλλά στην εντολή που τρέχεις της κάνεις από πριν redirection (με bash) το output στο standard που θες...3. Γράφεις ένα bash script που παίρνει σαν arguments την εντολή που θες να τρέξεις και το standard που θες να κάνεις redirect στο output και τα γράφει στο log το script από την bash...To (1) είναι πλήρως προγραμματιστικό, επομένως και πιο μπελαλίδικο...Το (2) είναι μισό-μισό και μάλλον το πιο εύκολοΤο (3) τα κάνει όλα το script της bash, το οποίο είναι εύκολο, επεκτάσιμο, σίγουρο, αλλά μάλλον όχι κατάλληλο για εργασία (εγώ αυτό θα χρησιμοποιούσα)...Για το (1) ψάξε σχετικά θέματα με pipes και της popen και θα βρεις άπειρο κώδικα σε C...Για το (2) χρειάζεται να προσθέσεις στο string της εντολής που θα εκτελέσεις το "2>&1"... δες σχετικά στην παράγραφο 18.2 του tutorial του LinuxConfig...Για το (3) απλά πρέπει να γράψεις το bash script (αλλά άσ' το, δεν είναι ωραίο για εργασία σε C)...
DarkSaga Ιανουάριος 19, 2010 Author #3 Ιανουάριος 19, 2010 ευχαριστώ πολύ, έληξε η εργασία αλλά δεν το είχα υλοποιήσει αυτό (μαζί με μερικά άλλα ) με Pipes το είχαμε γράψει αλλά μας έγραφε και αυτό γαμώτο... περί bash από το link σου $18.2 #!/bin/bash cat $1 2>&1 αυτό που τo γράφω? στον κώσικά μου ή στο shell?
DarkSaga Ιανουάριος 19, 2010 Author #5 Ιανουάριος 19, 2010 στέλνει το error της προηγούμενης εντολής στο out που έπεται?0 input1 out2 error streams?
Jaco Ιανουάριος 19, 2010 #6 Ιανουάριος 19, 2010 Σωστά, οπότε αφού χρησιμοποιείς την popen, το μόνο που πρέπει να κάνεις είναι append το redirection που θες στο string της εντολής που θα εκτελέσει η popen... Δηλαδή...:FILE * fp;char tmpStr[100];int iResp;snprintf(tmpStr, 100, "%s [B]2>&1[/B] > /tmp/logFile.log", execCmd);fp = popen(tmpStr, "r");if (fp == NULL) { perror("[ERR]: popen-> "); return(EXIT_FAILURE);}//υπόλοιπος κώδικαςiResp = pclose(fp);if (iResp < 0) { perror("[ERR]: pclose-> "); return(EXIT_FAILURE);}όπου "execCmd" η εντολή που πρέπει να εκτελεστεί και "/tmp/logFile.log" το path του αρχείου που κρατάει τα σφάλματα...Υπάρχει ένα λάθος (μάλλον) και για να σε ακονίσω λίγο, θέλω να μου πεις πιο είναι...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.