Title: Εντολή system() Post by: Nessa NetMonster on May 28, 2008, 17:21:55 pm Έχω ξανασυναντήσει αυτό το πρόβλημα (βλ. topic "πρόγραμμα C που καλεί άλλο πρόγραμμα C"): Η εντολή system δε φαίνεται να εκτελείται. Για την ακρίβεια, δεν εκτελείται ούτε το παράδειγμα που υπάρχει στο help (αυτούσιο, copy-paste). Δουλεύω σε περιβάλλον Windows και χρησιμοποιώ τον compiler Turbo C. Μπορεί κάποιος να μου δώσει ένα παράδειγμα προγράμματος όπου η εντολή να εκτελείται ή να μου πει τι κάνω λάθος;
Το έτοιμο παράδειγμα είναι το εξής: #include <stdlib.h> #include <stdio.h> int main(void) { printf("About to spawn command.com and run a DOS command\n"); system("dir"); return 0; } Title: Re: Εντολή system() Post by: chggr005 on May 28, 2008, 18:25:54 pm nessa, γιατί δεν παίρνεις ένα καλό βιβλίο c++ να διαβάσεις?
Title: Re: Εντολή system() Post by: Nessa NetMonster on May 28, 2008, 18:31:26 pm Έχω βιβλίο, και έχω και το internet... αλλά πάλι δε βγάζω άκρη μερικές φορές.
Αν βέβαια ξέρεις κανένα βιβλίο ιδιαίτερα καλό και κατανοητό, πες μου. Title: Re: Εντολή system() Post by: chggr005 on May 28, 2008, 21:18:29 pm Υπάρχει το βιβλίο C++ How to program του Deitel που θεωρείται η βίβλος της C++. Είναι διαθέσιμο στην Αλεξάνδρεια, μαζί με άλλα 132 βιβλία για C++. Διάλεξε και πάρε...
Title: Re: Εντολή system() Post by: Nessa NetMonster on May 28, 2008, 21:42:42 pm Ευχαριστώ!
Title: Re: Εντολή system() Post by: Megawatt on May 28, 2008, 23:37:18 pm Υπάρχει το βιβλίο C++ How to program του Deitel που θεωρείται η βίβλος της C++. Είναι διαθέσιμο στην Αλεξάνδρεια, μαζί με άλλα 132 βιβλία για C++. Διάλεξε και πάρε... Εγω δεν ξερω κανεναν Deitel ....Εγω ξερω οτι ο ΔΑΣΚΑΛΟΣ της C, C++ και Java δεν ειναι αλλος απο τον Herbert Schildt... παραδειγμα: (http://img138.imageshack.us/img138/9205/cccir0.jpg) Title: Re: Εντολή system() Post by: Aurelius on May 29, 2008, 11:09:05 am Έχω ξανασυναντήσει αυτό το πρόβλημα (βλ. topic "πρόγραμμα C που καλεί άλλο πρόγραμμα C"): Η εντολή system δε φαίνεται να εκτελείται. Για την ακρίβεια, δεν εκτελείται ούτε το παράδειγμα που υπάρχει στο help (αυτούσιο, copy-paste). Δουλεύω σε περιβάλλον Windows και χρησιμοποιώ τον compiler Turbo C. Μπορεί κάποιος να μου δώσει ένα παράδειγμα προγράμματος όπου η εντολή να εκτελείται ή να μου πει τι κάνω λάθος; Το έτοιμο παράδειγμα είναι το εξής: #include <stdlib.h> #include <stdio.h> int main(void) { printf("About to spawn command.com and run a DOS command\n"); system("dir"); return 0; } Θα σου δωσω ενα πρακτικο παραδειγμα, με κωδικα που καλει την system για να δημιουργησει φακελους με βαση την ωρα: string giveTimeAsString() { time_t seconds; time (&seconds); struct tm * timeinfo = localtime(&seconds) ; string tim = asctime(timeinfo); size_t found = 0 ; do { unsigned int a = tim.find(' ', found); unsigned int b =tim.find(':', found); found = (a < b) ? a : b ; if(found != string::npos)tim[found] = '_' ; }while(found != string::npos) ; return tim.substr(0, tim.size() - 1) ; } και την καλεις μεσα σε μια συναρτηση ως εξης: string tim1 = giveTimeAsString() ; system(("mkdir "+temp_dir+"\\experiments\\"+tim1).c_str()) ; οπου temp_dir ειναι ενα string οπου εχεις βαλει ενα path της επιλογης σου Title: Re: Εντολή system() Post by: Aurelius on May 29, 2008, 11:11:06 am Αν εχεις καποια απορια πες το.
Title: Re: Εντολή system() Post by: chggr005 on May 29, 2008, 13:14:40 pm Υπάρχει το βιβλίο C++ How to program του Deitel που θεωρείται η βίβλος της C++. Είναι διαθέσιμο στην Αλεξάνδρεια, μαζί με άλλα 132 βιβλία για C++. Διάλεξε και πάρε... Εγω δεν ξερω κανεναν Deitel ....Εγω ξερω οτι ο ΔΑΣΚΑΛΟΣ της C, C++ και Java δεν ειναι αλλος απο τον Herbert Schildt... Title: Re: Εντολή system() Post by: Nessa NetMonster on May 29, 2008, 15:48:10 pm Μου βγάζει "undefined symbol 'string' in function main"
Title: Re: Εντολή system() Post by: Aurelius on May 29, 2008, 15:53:56 pm Εχεις κανει
#include <string> ??? Title: Re: Εντολή system() Post by: Καμένος on May 29, 2008, 16:08:42 pm μάλλον όχι...
Title: Re: Εντολή system() Post by: Nessa NetMonster on May 29, 2008, 16:15:21 pm Έχω κάνει #include <string.h>
Title: Re: Εντολή system() Post by: Aurelius on May 29, 2008, 16:47:09 pm Γραψε
#include <string> using namespace std; Παλι σου βγαζει undefined symbol ? Title: Re: Εντολή system() Post by: Nessa NetMonster on May 29, 2008, 17:05:30 pm Δε μπορώ να κάνω #include <string>, μόνο #include <string.h>.
Title: Re: Εντολή system() Post by: Aurelius on May 29, 2008, 17:08:40 pm To namespace το εχεις βαλει?
Title: Re: Εντολή system() Post by: Nessa NetMonster on May 29, 2008, 17:18:39 pm Το έβαλα, αλλά πάλι δεν αναγνωρίζει το string.
Title: Re: Εντολή system() Post by: Καμένος on May 30, 2008, 10:41:05 am Δε μπορώ να κάνω #include <string>, μόνο #include <string.h>. Μάλλον γιατί γράφεις σε C και οχι C++... Για πόσταρε τον κώδικα.. Title: Re: Εντολή system() Post by: Nessa NetMonster on May 30, 2008, 10:44:20 am #include <stdlib.h>
#include <stdio.h> #include <string.h> using namespace std; int main(void) { string tim1 = giveTimeAsString() ; string temp_dir="c:" ; system(("md "+temp_dir+"\\experiments\\"+tim1).c_str()) ; } string giveTimeAsString() { time_t seconds; time (&seconds); struct tm * timeinfo = localtime(&seconds) ; string tim = asctime(timeinfo); size_t found = 0 ; do { unsigned int a = tim.find(' ', found); unsigned int b =tim.find(':', found); found = (a < b) ? a : b ; if(found != string::npos)tim[found] = '_' ; }while(found != string::npos) ; return tim.substr(0, tim.size() - 1) ; } Title: Re: Εντολή system() Post by: Καμένος on May 30, 2008, 11:00:17 am και τι σφάλμα σου βγάζει στον παραπάνω κώδικα?
Title: Re: Εντολή system() Post by: Nessa NetMonster on May 30, 2008, 11:05:45 am Μου βγάζει "undefined symbol 'string' in function main" Title: Re: Εντολή system() Post by: Καμένος on May 30, 2008, 11:11:26 am Λογικό. Στη C δεν υπάρχουν strings. Υπάρχουν συναρτήσεις για strings που εφαρμόζονται σε πίνακες με chars. Δές εδώ:
http://www.macdonald.egate.net/CompSci/hstrings.html Αν θές να δηλώσεις μία μεταβλητή string, σημαίνει ότι την κάνεις ένα αντικείμενο της κλάσης string της C++. Η C δεν είναι αντικειμενοστρεφής.. Ελπίζω να τα λέω σωστά.. και να βοήθησα! Title: Re: Εντολή system() Post by: Nessa NetMonster on May 30, 2008, 11:16:38 am Ευχαριστώ που το ξεκαθάρισες :)
ΟΚ, τότε γυρνάμε στο πρώτο πρόγραμμα (πρώτο ποστ)... αυτό γιατί δε δουλεύει; Τι πρέπει να κάνω για να μου εμφανίσει τον κατάλογο των αρχείων; Title: Re: Εντολή system() Post by: Aurelius on May 30, 2008, 11:29:38 am Με την εντολη system? Κανε οπως εκανα το mkdir. Δηλαδη δινεις σε string ή σε char* τελος παντων την εντολη και το path. Για να σου εμφανισει καταλαογο αρχειων η συνταξη στο DOS ειναι
dir "path" Αρα λογικα string s1 = " dir \"cd c:\\nessa_path\" " ; system(s1) ; και δουλευει. Το δοκιμασα σε μενα και δουλευει. Ο κωδικας μου ειναι string tmp="dir \"C:\\hand_results\"" ; system(tmp.c_str()) ; Title: Re: Εντολή system() Post by: Aurelius on May 30, 2008, 11:30:14 am Προφανως αν δουλευεις οντως σε C (αληθεια γιατι δεν πας σε C++??)
θα βαλεις char* Title: Re: Εντολή system() Post by: Nessa NetMonster on May 30, 2008, 11:44:33 am Εδώ:
#include <stdlib.h> #include <stdio.h> int main(void) { char *d="dir \"C:\\TC\""; printf("About to spawn command.com and run a DOS command\n"); system(d); return 0; } τι κάνω λάθος; :-\ Title: Re: Εντολή system() Post by: Καμένος on May 30, 2008, 11:50:23 am Δοκίμασε:
char d[11]; strcpy(d, "dir\"C:\\TC\""); Και δήλωσε και τη string.h Title: Re: Εντολή system() Post by: Nessa NetMonster on May 30, 2008, 11:52:11 am Άκυρο, δούλεψε χωρίς εισαγωγικά.
Το παράξενο είναι ότι όταν πηγαίνω στη γραμμή εντολών, ανοίγω τον Turbo C, τρέχω το πρόγραμμα από εκεί (compile+run) και ξαναβγαίνω, δεν έχει εκτελεστεί η dir, μόνο η printf. Πρέπει να τρέξω το exe από μόνο του για να εκτελεστεί η dir :???: Title: Re: Εντολή system() Post by: Aurelius on May 30, 2008, 12:26:40 pm Εδώ: #include <stdlib.h> #include <stdio.h> int main(void) { char *d="dir \"C:\\TC\""; printf("About to spawn command.com and run a DOS command\n"); system(d); return 0; } τι κάνω λάθος; :-\ Δεν δεσμευσες χωρο για το char* ??? Οταν λες χωρις εισαγωγικα? Title: Re: Εντολή system() Post by: Nessa NetMonster on May 30, 2008, 12:30:23 pm Αυτό:
#include <stdlib.h> #include <stdio.h> int main(void) { char *d="dir C:\\TC"; printf("About to spawn command.com and run a DOS command\n"); system(d); return 0; } δουλεύει. Δε χρειάζεται να δεσμεύσω χώρο για το char, αφού του δίνω αρχική τιμή ;) |