nantia_rd Δημοσ. 26 Φεβρουαρίου 2008 Δημοσ. 26 Φεβρουαρίου 2008 Καλησπέρα, Είμαι αρχάρια στο προγραμματισμό και έχω την εξής απορία. Θέλω να γράψω μια εφαρμογή στα windows η οποία έχει ως προδιαγραφές στα UNIX/LINUX τα εξής: Το πρόγραμμα θα δουλεύει ως ένα filter του Unix shell, δηλαδή θα δέχεται input από το standard input και θα κάνει output στο standard output και πιθανόν στο standard error. Δηλαδή θα διαβάζει χαρακτήρες κειμένου από το standard input και στην συνέχεια θα γράφει αντίστοιχους χαρακτήρες στο standard output, και θα γράφει πιθανά error και warning μηνύματα στο standard error. Επίσης η εφαρμογή θα πρέπει να τρέχει στα UNIX με την εξής εντολή: cat eisodos_dedomenon | to_programma_mou to_programma_mou < eisodos_dedomenon > eksodos_dedomenon Η απορία μου είναι η εξής. Έχω δημιουργήσει κανονικά το πρόγραμμα στα windows και κάνει την δουλειά που θέλω. Το θέμα είναι η εισαγωγή και η εξαγωγή δεδομένων να μπορεί να λειτουργήσει και σε περιβάλλον UNIX/LINUX. Έκανα μερικές δοκιμές με τις συναρτήσεις getchar() και putchar(), χωρίς όμως αποτέλεσμα. Ξέρει κανείς πως θα τις χρησιμοποιήσω ώστε να λειτουργεί το πρόγραμμα; Οποιαδήποτε βοήθεια θα μου ήταν χρήσιμη...
GeorgeK1986 Δημοσ. 27 Φεβρουαρίου 2008 Δημοσ. 27 Φεβρουαρίου 2008 Hi there, have a look at http:\\http://www.mono-project.com/Main_Page that will do if the program is written in C#.
gtroza Δημοσ. 28 Φεβρουαρίου 2008 Δημοσ. 28 Φεβρουαρίου 2008 http://www.mingw.org/ η "τρέξε" linux απο live cd και κάνεις ότι δοκιμές θέλεις "ακίνδυνα" ! καλή επιτυχία και καλή αρχή με το Linux ! google > man getchar http://www.google.gr/search?q=man+getchar&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:el-GR:official&client=firefox-a .
nantia_rd Δημοσ. 1 Μαρτίου 2008 Μέλος Δημοσ. 1 Μαρτίου 2008 Ευχαριστώ για την βοήθεια! Εγκατέστησα το MinGW που αναφέρεις και συννεχίζω να έχω την εξής απορία. Πως θα κάνω ανακατεύθηνση εισόδου; Δηλαδή πως θα δώσω ως είσοδο στο πρόγραμμα μου ένα αρχείο .txt;; Στο πρόγραμμα την είσοδο δεδομένων την κάνω με την getchar(), σύμφωνα με την οποία αν έτρεχα το πρόγραμμα στο στα linux/unix την ανακατεύθηνση εισόδου θα την έκανα κάπως έτσι: cat test | my_programe. Mε το MinGW πως θα το κάνω; Καμιά ιδέα;
Directx Δημοσ. 1 Μαρτίου 2008 Δημοσ. 1 Μαρτίου 2008 Δοκίμασε την χρήση του < ως my_program <my_file, οπότε το my_file θα περαστεί αυτόματα από τα Windows στο stdin του my_program. Ομοίως αν θες να περάσεις στο stdin του my_program τα αποτελέσματα της εντολής dir (ή άλλου προγράμματος), δώσε (ξανά) από το Windows console: my_program |dir Για παράδειγμα υποθέτουμε πως το my_program μοιάζει με αυτό.. > #include <stdio.h> #ifdef __BORLANDC__ #pragma hdrstop #endif #ifdef __BORLANDC__ #pragma argused #endif int main(int argc,char *argv[]) { int nC; while((nC=getchar())!=EOF) putchar(nC); return 0; } Υ.Γ. Για αυτό το παράδειγμα (γραμμένο σε CodeGear Turbo C++ Explorer) δεν χρειάζεσαι έξτρα βιβλιοθήκες, όπως η MiniGW κτλ.
nantia_rd Δημοσ. 2 Μαρτίου 2008 Μέλος Δημοσ. 2 Μαρτίου 2008 Καταρχήν ευχαριστώ για την βοήθεια! Προσπάθησα να κάνω αυτά που αναφέρεις χωρίς όμως αποτέλεσμα...αρχάρια βλέπεις... Ας τα πάρουμε όμως απο την αρχή. Για να τρέξω με την κονσόλα το πρόγραμμα, πηγαίνω Έναρξη->Εκτέλεση και γράφω CMD, σωστά. Στο μαύρο παράθυρο που θα ανοίξει γράφω my_program <my_file και πατάω enter. Με την προϋπόθεση πάντα ότι τα αρχεία my_program.c και my_file.txt βρίσκονται στο φάκελο: C:\Documents and Settings\nantia_rd Όταν εκτελω λοιπόν την εντολή, το μόνο που κάνει είναι να ανοίγει το Visual Studio και να μην κάνει τίποτε άλλο. Σαν να πατά μέσα απο το πρόγραμμα, Άνοιγμα ενός αρχείου... Κάνω κάτι λάθος; Καμιά ιδέα;
Directx Δημοσ. 2 Μαρτίου 2008 Δημοσ. 2 Μαρτίου 2008 Πράγματι την κονσόλα την ανοίγουμε όπως είπες, από εκεί και πέρα όμως, εξασφαλίζουμε πως το my_program είναι μεταγλωττισμένο σε εκτελέσιμη μορφή (my_program.exe) διότι διαφορετικά, αν δοκιμάσουμε να το καλέσουμε ως my_program.c τότε η κονσόλα θα δοκιμάσει να ανοίξει το αρχείο με το default πρόγραμμα που είναι ορισμένο να επεξεργάζεται αρχεία με κατάληξη .c, στην περίπτωση σου το Visual Studio. Συνεπώς, μεταγλώττισε το πρόγραμμα, πήγαινε στον κατάλογο που βρίσκεται το εκτελέσιμο, εξασφάλισε πως και εκεί υπάρχει ένα my_file και δοκίμασε ξανά.
nantia_rd Δημοσ. 2 Μαρτίου 2008 Μέλος Δημοσ. 2 Μαρτίου 2008 Ωραία, έτσι δουλεύει! Έχω και την εξής απορία πάνω σ'αυτό. Κάπου είχα βρεί οδηγίες και είχα περάσει τον gcc compiler στα windows, και απ' ότι ανέφερε θα μπορούσα να γράφω τα προγράμματα σε κάποιον editor και μετά να τα κάνω compile και να τα τρέχω απο την κονσόλα. Συνεπώς μήπως υπάρχει τρόπος να τρέξω κατευθείαν το πρόγραμμα απο την κονσόλα χωρίς να χρειάζεται να δημιουργήσω το εκτελέσιμο αρχείο με το MiniGW; ΥΓ. Γνωρίζει μήπως κανείς πως θα μπορούσα να αντικαταστήσω αυτές τις δύο εντολές χρησιμοποιώντας την putchar(); printf("%c", i); και printf("Χ"); (Η μεταβλητή i είναι τύπου int και όχι char!).
Directx Δημοσ. 2 Μαρτίου 2008 Δημοσ. 2 Μαρτίου 2008 Το πρώτο ερώτημα σου δεν το καταλαβαίνω - υποθέτω πως μάλλον θέλεις να τρέξεις από την console τον compiler σου, όμως δεν χρησιμοποιώ καθόλου τον gcc & MiniGW οπότε .. Για το δεύτερο, απλά αντί για "%c",i δώσε putchar(i) καθώς η putchar διαβάζει int. Δηλαδή: > #include <stdio.h> int main(int argc, char* argv[]) { /* printf("%c" ... */ int nC; for(nC='A';nC<='Z';nC++) printf("%c",nC); printf("\n"); /* putchar(nC ... */ for(nC='A';nC<='Z';nC++) putchar(nC); putchar('\n'); putchar('X'); printf("\nPress Enter to exit.."); getchar(); return 0; } Τώρα να κάνεις σύμπτυξεις το %c και το X σε μια putchar από όσο γνωρίζω δεν γίνεται (σε μια printf γίνεται ως %cX\n",i κτλ.)
gtroza Δημοσ. 3 Μαρτίου 2008 Δημοσ. 3 Μαρτίου 2008 δές αυτό http://www.cygwin.com/ υγ:δεν είμαι προγραμματιστής .
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.