Jump to content



popen redirection


DarkSaga

Recommended Posts

ερώτηση κρίσεως...

θέλω σε μια εφαρμογή server client(linux)

να εκτελώ εντολές που μου έρχοντι από τον client

κάνω τα διάφορα

και επέλεξα(σωστά ή όχι δεν ξέρω)

να της στείλω προς εκτέλεση με popen

πως μπορώ να διαβάσω το stderr της popen και να το ανακατευθύνω σε ένα αρχείο χρήστη? err_log πoυ έχω?

το std_out το έχω διαβάσει και ανακατευθύνει σωστά

μπορώ ταυτόχρονα

να πάρω και std_err???

καμια πρόταση?

από τους βοηθούς (πρόκειται για εργασία που λήγει αύριο ,καλό?)

είχε δοθεί σε άλλο συνάδελφο η απάντηση εκτελέστε με bash

αλλά δεν το έπιασα

και όσο κι αν googliσα σε κάτι άκυρα κατέληξα για bash scripting :giveup:

Link to comment
Share on other sites

Υπάρχουν πολλοί τρόποι να το κάνεις αυτό που θες...

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)...

Link to comment
Share on other sites

ευχαριστώ πολύ,

έληξε η εργασία αλλά δεν το είχα υλοποιήσει αυτό

(μαζί με μερικά άλλα :p)

με Pipes το είχαμε γράψει αλλά μας έγραφε και αυτό γαμώτο...

περί bash

από το link σου $18.2

#!/bin/bash

cat $1 2>&1

αυτό που τo γράφω? στον κώσικά μου ή στο shell?

Link to comment
Share on other sites

Σωστά, οπότε αφού χρησιμοποιείς την 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 του αρχείου που κρατάει τα σφάλματα...

Υπάρχει ένα λάθος (μάλλον) και για να σε ακονίσω λίγο, θέλω να μου πεις πιο είναι...

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

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

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.