PDA

Επιστροφή στο Forum : MS-DOS C++ (RD-DIR)



nemo18
16-05-09, 22:23
ΚΑΛΗΣΠΕΡΑ ΘΑ ΗΘΕΛΑ ΤΙ ΒΟΗΘΕΙΑ ΣΑΣ ΣΧΕΤΙΚΑ ΜΕ ΕΝΑ ΠΡΟΤΖΕΚΤ ΠΟΥ ΜΑΣ ΕΧΟΥΝ ΒΑΛΕΙ!!
ΚΑΤΑΡΧΗΝ ΕΙΜΑΙ ΑΡΧΑΡΙΟΣ ΚΑΙ ΜΕ ΤΗΝ C++ ΚΑΘΩΣ ΚΑΙ ΜΕ ΤΟ MS-DOS.
Η ΕΡΩΤΗΣΗ ΕΙΝΑΙ :
Προσομοίωση της εντολής “DIR” σε συνδυασμό με την “RD” με πρόγραμμα σε γλώσσα C++ με συμπερίληψη όλων των δυνατών επιλογών (options) της αρχικής εντολής του DOS.

ΔΕ ΘΑ ΗΘΕΛΑ ΚΑΠΟΙΑ ΛΥΣΗ ΑΠΛΑ ΚΑΠΟΙΑ ΒΟΗΘΕΙΑ Ή ΕΝΑ ΠΑΡΑΔΕΙΓΜΑ ΑΦΟΥ ΣΤΟ ΤΕΙ ΜΟΛΙΣ ΤΩΡΑ ΜΠΗΚΑΜΕ ΣΤΟ MS-DOS ΚΑΙ ΔΕΝ ΕΧΩ ΙΔΕΑ!!!!!!



ΕΥΧΑΡΙΣΤΩ ΠΡΟΚΑΤΑΒΟΛΙΚΑ!!!!

virxen
17-05-09, 00:21
rd =remove directory(folder-φάκελος στα windows)

π.χ.
c:\>rd fff

διαγράφει τον κατάλογο c:\fff ΜΟΝΟ ΚΑΙ ΜΟΝΟ ΑΝ ΕΙΝΑΙ ΚΕΝΟΣ
δηλαδή χωρίς αρχεία ή υποκαταλόγους

στο dos γράψε
c:\>dir /?
και θα σου δώσει τις παραμέτρους που έχει η dir
c:\>rd /?
και θα σου δώσει τις παραμέτρους που έχει η rd



#include <stdio.h>
#include <dos.h>
void main()
{
struct find_t q ;
int a;
a = _dos_findfirst("*.*",1,&q);
if(a==0)
{
while (!a)
{
printf(" %s\n", q.name);
a = _dos_findnext(&q);
}
}
else
{
printf("File not found");
}
}




παράδειγμα του dir *.*
καλή συνέχεια!
ότι άλλο θες στέλνε τον κώδικα σου και που κολλάς και αν μπορώ θα σε βοηθήσω

WagItchyef
17-05-09, 13:28
ΚΑΛΗΣΠΕΡΑ ΘΑ ΗΘΕΛΑ ΤΙ ΒΟΗΘΕΙΑ ΣΑΣ ΣΧΕΤΙΚΑ ΜΕ ΕΝΑ ΠΡΟΤΖΕΚΤ ΠΟΥ ΜΑΣ ΕΧΟΥΝ ΒΑΛΕΙ!!
ΚΑΤΑΡΧΗΝ ΕΙΜΑΙ ΑΡΧΑΡΙΟΣ ΚΑΙ ΜΕ ΤΗΝ C++ ΚΑΘΩΣ ΚΑΙ ΜΕ ΤΟ MS-DOS.
Η ΕΡΩΤΗΣΗ ΕΙΝΑΙ :
Προσομοίωση της εντολής “DIR” σε συνδυασμό με την “RD” με πρόγραμμα σε γλώσσα C++ με συμπερίληψη όλων των δυνατών επιλογών (options) της αρχικής εντολής του DOS.

ΔΕ ΘΑ ΗΘΕΛΑ ΚΑΠΟΙΑ ΛΥΣΗ ΑΠΛΑ ΚΑΠΟΙΑ ΒΟΗΘΕΙΑ Ή ΕΝΑ ΠΑΡΑΔΕΙΓΜΑ ΑΦΟΥ ΣΤΟ ΤΕΙ ΜΟΛΙΣ ΤΩΡΑ ΜΠΗΚΑΜΕ ΣΤΟ MS-DOS ΚΑΙ ΔΕΝ ΕΧΩ ΙΔΕΑ!!!!!!



ΕΥΧΑΡΙΣΤΩ ΠΡΟΚΑΤΑΒΟΛΙΚΑ!!!!

Ποιον compiler χρησιμοποιείτε;

........Auto merged post: WagItchyef πρόσθεσε 2 λεπτά και 4 δευτερόλεπτα αργότερα ........


rd =remove directory(folder-φάκελος στα windows)

π.χ.
c:\>rd fff

διαγράφει τον κατάλογο c:\fff ΜΟΝΟ ΚΑΙ ΜΟΝΟ ΑΝ ΕΙΝΑΙ ΚΕΝΟΣ
δηλαδή χωρίς αρχεία ή υποκαταλόγους

στο dos γράψε
c:\>dir /?
και θα σου δώσει τις παραμέτρους που έχει η dir
c:\>rd /?
και θα σου δώσει τις παραμέτρους που έχει η rd



#include <stdio.h>
#include <dos.h>
void main()
{
struct find_t q ;
int a;
a = _dos_findfirst("*.*",1,&q);
if(a==0)
{
while (!a)
{
printf(" %s\n", q.name);
a = _dos_findnext(&q);
}
}
else
{
printf("File not found");
}
}




παράδειγμα του dir *.*
καλή συνέχεια!
ότι άλλο θες στέλνε τον κώδικα σου και που κολλάς και αν μπορώ θα σε βοηθήσω


Καλό θα ήταν να μας έλεγες ποια system specific βιβλιοθήκη χρησιμοποιείς.


Επειδή γράφεις πρόγραμμα σε C και όχι σε C++, στην ISO C, οι δυνατές μορφές της main() είναι οι ακόλουθες:

int main(), int main(void) [αυτές οι δύο μορφές δεν είναι ταυτόσημες], int main(int argc, char *argv[]) / int main(int argc, char **argv).


Στην ISO C++, οι δυνατές μορφές της main() είναι οι ακόλουθες:

int main()/ int main(void), int main(int argc, char *argv[]) / int main(int argc, char **argv).

murray
18-05-09, 12:22
Πέρα απ' το να δώσεις σε κονσόλα
dir /? και
rd /? όπως λέει και ο virxen, μπορείς να ψάξεις λίγο και στο Google, κυρίως επειδή τα options αυτών των εντολών έχουν διαφοροποιηθεί στις εκδόσεις Windows από τις αρχικές DOS εκδόσεις (και φαντάζομαι δεν σου βρίσκεται διαθέσιμη κάποια πρόχειρη εγκατάσταση DOS 6.2 :p). Δες εδώ ένα site, το πρώτο που μου βγήκε στην αναζήτηση: http://www.computerhope.com/dirhlp.htm

@Virxen: Δεν νομίζω ότι η άσκηση ζητάει να χρησιμοποιηθούν βιβλιοθήκες DOS. Το λέω επειδή ο κώδικας που έγραψες χρησιμοποιεί κλήσεις από το dos.h. Εγώ καταλαβαίνω ότι τα παιδιά πρέπει να γράψουν ένα πρόγραμμα από το μηδέν που να κάνει ό,τι θα έκαναν οι dir και rd, χρησιμοποιώντας δηλαδή μόνο standard κλήσεις της C++ (το οποίο ενδεχομένως να τρέχει σε οποιαδήποτε πλατφόρμα).


Επειδή γράφεις πρόγραμμα σε C και όχι σε C++, στην ISO C, οι δυνατές μορφές της main() είναι οι ακόλουθες:

int main(), int main(void) [αυτές οι δύο μορφές δεν είναι ταυτόσημες], int main(int argc, char *argv[]) / int main(int argc, char **argv).


Στην ISO C++, οι δυνατές μορφές της main() είναι οι ακόλουθες:

int main()/ int main(void), int main(int argc, char *argv[]) / int main(int argc, char **argv).

Μεγάλε, είσαι θεός! Ο άνθρωπος ρώτησε για τη χρήση δύο εντολών του DOS/command line κι εσύ κατάφερες και το γύρισες πάλι σε misconceptions της C. :worthy::worthy::worthy::rofl: Είσαι άπαιχτος, υποκλίνομαι :respekt::clap:

WagItchyef
18-05-09, 13:13
Μεγάλε, είσαι θεός! Ο άνθρωπος ρώτησε για τη χρήση δύο εντολών του DOS/command line κι εσύ κατάφερες και το γύρισες πάλι σε misconceptions της C. :worthy::worthy::worthy::rofl: Είσαι άπαιχτος, υποκλίνομαι :respekt::clap:

θεός δεν είμαι, αλλά με Την Βοήθεια Του Θεού, όποτε βλέπω λάθη θα τα διορθώνω πάντοτε.

........Auto merged post: WagItchyef πρόσθεσε 4 λεπτά και 56 δευτερόλεπτα αργότερα ........

Τo "DOS" των Windows XP, κ.λ.π. βασίστηκε στο MS DOS 5.0, οπότε έχουν ότι είχε το MS DOS 5.0. Έτσι π.χ. έχουν την rd /s /q για τη διαγραφή καταλόγων γεμάτων ή άδειων, και όχι την deltree /y.

virxen
18-05-09, 13:34
@Virxen: Δεν νομίζω ότι η άσκηση ζητάει να χρησιμοποιηθούν βιβλιοθήκες DOS. Το λέω επειδή ο κώδικας που έγραψες χρησιμοποιεί κλήσεις από το dos.h. Εγώ καταλαβαίνω ότι τα παιδιά πρέπει να γράψουν ένα πρόγραμμα από το μηδέν που να κάνει ό,τι θα έκαναν οι dir και rd, χρησιμοποιώντας δηλαδή μόνο standard κλήσεις της C++ (το οποίο ενδεχομένως να τρέχει σε οποιαδήποτε πλατφόρμα).



και πως προτείνεις να βρουν όλα τα αρχεία που υπάρχουν στον δίσκο
όπως κάνει η dir *.* π.χ.
αν υπάρχει άλλος τρόπος εκτος από την χρήση του dos.h
πες μας τον.

nemo18
18-05-09, 21:28
ευχαριστω και παλι το μαθημα ειναι λειτουργικα συστηματα!!!

WagItchyef χρησιμοποιουμε το CodeGear™ C++Builder® 2009 στο προγραμματισμο

Παντως οπως λεει και ο murray πρεπει να φτιαξουμε ενα προγραμμα απο το μηδεν...

οι υπολογιστες που χρησιμοποιουμε εχουν λειτουργικο συστημα windows 2000 :p:p

WagItchyef
18-05-09, 21:40
Σας είπαν τίποτα στο μάθημα για το ποιες συναρτήσεις/κατηγορίες θα χρησιμοποιήσετε; Σας έδωσαν ως παράδειγμα τον κώδικα υλοποίησης μίας ή περισσότερων παρόμοιων εντολών του DOS;

murray
19-05-09, 01:30
και πως προτείνεις να βρουν όλα τα αρχεία που υπάρχουν στον δίσκο
όπως κάνει η dir *.* π.χ.
αν υπάρχει άλλος τρόπος εκτος από την χρήση του dos.h
πες μας τον.

Διακρίνω κάποια επιθετικότητα; Κι εγώ δεν ξέρω πώς αλλιώς θα μπορούσε να υλοποιήσει το ζητούμενο, αλλά νόμιζα ότι επρόκειτο για κάποια άσκηση σε εισαγωγικό μάθημα της C. Τώρα που μας είπε ο φίλος ότι είναι άσκηση στο μάθημα των λειτουργικών συστημάτων συμφωνώ με τον τρόπο που υπέδειξες.

Κατά τ' άλλα δεν νομίζω ότι χρειάζεται να δωθεί παράδειγμα για τέτοια άσκηση. Τι είμαστε εδώ; Γυμνάσιο που κάναμε 5 είδη ασκήσεων και στις εξετάσεις έπεφταν τα ίδια θέματα με αλλαγμένα νούμερα;

Προσπάθησε φίλε μου να την κάνεις και όπου κολλήσεις εδώ είμαστε. ;)

virxen
19-05-09, 01:36
Διακρίνω κάποια επιθετικότητα;


sorry murray αν το εξελαβες έτσι δεν είχα τέτοια πρόθεση

WagItchyef
19-05-09, 09:29
Κατά τ' άλλα δεν νομίζω ότι χρειάζεται να δωθεί παράδειγμα για τέτοια άσκηση. Τι είμαστε εδώ; Γυμνάσιο που κάναμε 5 είδη ασκήσεων και στις εξετάσεις έπεφταν τα ίδια θέματα με αλλαγμένα νούμερα;


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

jtsop
19-05-09, 09:40
Τo "DOS" των Windows XP, κ.λ.π. βασίστηκε στο MS DOS 5.0, οπότε έχουν ότι είχε το MS DOS 5.0. Έτσι π.χ. έχουν την rd /s /q για τη διαγραφή καταλόγων γεμάτων ή άδειων, και όχι την deltree /y.
Θα έλεγα ότι βασίστηκε στο DOS 6.22


και πως προτείνεις να βρουν όλα τα αρχεία που υπάρχουν στον δίσκο
όπως κάνει η dir *.* π.χ.
αν υπάρχει άλλος τρόπος εκτος από την χρήση του dos.h
πες μας τον.
opendir, readdir

murray
19-05-09, 10:04
sorry murray αν το εξελαβες έτσι δεν είχα τέτοια πρόθεση

ΟΚ :)


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

Εδώ σου λέει ότι κάνουν μάθημα λειτουργικών συστημάτων, όχι εισαγωγικό μάθημα στον προγραμματισμό. Θεωρείται δηλαδή ότι η γλώσσα που χρησιμοποιούν είναι ήδη γνωστή και δεν μαθαίνουν προγραμματισμό όπως λες (θεωρητικά τουλάχιστον). ;)


opendir, readdir

Δεν ήξερα ότι υπάρχουν αυτές οι συναρτήσεις, αλλά από λίγο ψάξιμο που έκανα είδα ότι περιλαμβάνονται στη header <dirent.h> και δεν είναι μέρος της standard ANSI βιβλιοθήκης, οπότε πρέπει να σιγουρευτείς ότι υπάρχει υλοποίηση για το μηχάνημα πάνω στο οποίο προγραμματίζεις (αν και σύμφωνα με το wiki είναι ψευδο-standard, οπότε μάλλον δεν θα έχεις κανένα πρόβλημα).

Από την άλλη, αφού μιλάμε για λειτουργικά συστήματα, μάλλον οι καθηγητές θα θέλουν κλήσεις συστήματος, οπότε ενθαρρύνω κι εγώ να πας προς τη λύση που πρότεινε στην αρχή ο virxen.

virxen
19-05-09, 10:16
όσο αφορά το
#include <dirent.h>

δες εδώ

http://www.softagalleria.net/dirent.php

WagItchyef
19-05-09, 10:54
Θα έλεγα ότι βασίστηκε στο DOS 6.22


Κάνεις λάθος. Βασίστηκε στο DOS 5.0. Το 6.22 είχε την deltree και δεν μπορούσες να σβήσεις γεμάτο κατάλογο με την rd.

Επίσης το 6.22 είχε την scandisk για τον έλεχο του δίσκου.

Το έχω διαβάσει κάπου επισήμως, ότι το command line των Windows βασίστηκε στο DOS 5.0 (μάλλον από την εποχή των NT 4.0).

virxen
19-05-09, 11:42
κατα τύχη έπεσα σε αυτό

www.teiser.gr/icd/staff/skaros/Leitourgika/Shmeiwseis_Project.pdf

WagItchyef
19-05-09, 14:41
Έχει μερικά λάθη, καλύτερα να έχετε το "The C Programming Language" 2nd Edition των Brian Kernighan, Dennis Ritchie (ο δημιουργός της C) ως βιβλίο αναφοράς, αφού έχετε περάσει όλα τα errata:

http://cm.bell-labs.com/cm/cs/cbook/2ediffs.html


Κατά καιρούς το ανωτέρω link δεν δουλεύει. Αν δεν δουλεύει, έχω κάνει mirror τη σελίδα εδώ:

http://www.cpp-software.net/documents/other_documents/2ediffs.html

nemo18
20-05-09, 17:44
Ευχαριστω για τις πληροφοριες!!!τουλαχιστον τωρα ξερω πως να αρχισω

@ ADSLgr.com All rights reserved.