Newsgroup: it.comp.lang.c
Titolo: Comandi dos in C

Salve, vorrei sapere come si fa a implementare comandi dos (tipo cd, dir, 
copy, del etc.) all'interno di programmi scritti con il C. Grazie!

Dunque: esiste un header in C/C++ che si chiama dos.h
#include <dos.h>
che contiene la system call per dos.
Se intendi ricostruire dei comandi di sistema dovresti partire dalla
sistem Call del sistema operativo... cerca pero di capire a cosa servono
le varie system call prima di iniziare: io personalmente non le conosco
dato che preferisco di gran lunga i sistemi unix.
Saluti e buon lavoro
                             /\
  I            \{__}/       /((\
 ;~;           \>@@</        ) )
 | |`\____vvvV__(oo)__Vvvv__(_(_   I
 | |             ``             `\;~;
 ;_;        Luca De Vitis         | |
  I `\__________________________  | |
                 ';;;;;(  )`    `\;_;
                   \ \/ \ \//      I
                  _/_/ _/ /
                 vvvV^ Vvvv

copy, del etc.) all'interno di programmi scritti con il C. Grazie!
"Non si fa", almeno non esattamente quel che tu hai chiesto...!-)  Tutti
i comandi che dici, infatti, sono implementati da 
COMMAND.COM
; puoi
"passargli la palla", ad esempio con una system("COMMAND /C CD \\"),
ma, a parte l'inefficienza esagerata, se cosi` fai i comandi in questione
non saranno comunque "implementati ... all'interno" dei programmi da
te scritti in C, bensi`, al loro _esterno_, sempre in COMMAND.COM:-).
Le librerie piu` o meno standard del C ti forniscono tutte le funzioni
necessarie per implementare la _funzionalita`_ equivalente a questi
comandi, alcuni banalmente (chdir("\\"), ad esempio!), altri meno (ad
esempio, "dir" richiedera` un ciclo di findfirst/findnext [o piccole
varianti di spelling di queste due funzioni, secondo il compilatore],
ecc ecc), ma comunque nulla di stratosferico, e comunque molto
piu` efficientemente che non con una system per chiamare COMMAND!
Alex

piu` efficientemente che non con una system per chiamare COMMAND!
Ma non sono portabili !!!!!!
La chiamata "system" e' quella che va usata perche' standard.
Andrea Laforgia
(remove NOSPAM from my address before reply via e-mail)
ICQ #8328956

La chiamata "system" e' quella che va usata perche' standard.
Prima di criticare, ti consiglio di pensare sei volte a quello che stai
scrivendo, e poi ripensarci un'altra volta; a tenere la bocca chiusa
non si rischierebbe di scrivere delle idiozie.
    Secondo te, system("cd \\") e`, ad un qualsiasi livello, "standard",
    ovvero "portabile"?  Provalo su Unix, e poi mi dirai.  Se anche
    riuscissi a far cambiare directory al processo invocato da
    system(), presumibilmente con un'altra sintassi:-), il directory
    corrente del processo da cui chiami system non cambiera`,
    *ovviamente*, mai...
    E system("dir")?  Ancora, provalo su Unix!
Non esistono modi "portabili" ne` "standard", in C, per cambiare
il directory corrente, o per ottenere l'elenco dei file nel directory
corrente.  Certo, la system(), per cercare di passare la palla ad
un qualche altro meccanismo che sappia fare questi lavori, puoi
chiamarla su qualsiasi sistema, ma resta comunque totalmente
non-portabile, perche` la stringa che dovresti passarle cambiera`
da sistema a sistema, e certe cose, come cambiare il directory
corrente del tuo processo, su certi sistemi, come Unix, non puoi
ottenerle con la tua amata system() neanche a piangere.
Scrivo codice C portabile fra N sistemi operativi da 16 anni, e
dubito fortemente di avere qualcosa da imparare da te in termini
di standard, o di portabilita`...
Alex

di standard, o di portabilita`...
Se e' vero che il verbo "dubitare" significa "sospettare" la tua frase
"dubito fortemente di avere qualcosa da imparare da te in termini
di standard, o di portabilita`..."
potrebbe essere riscritta come 
"sospetto fortemente di avere qualcosa da imparare da te in termini
di standard, o di portabilita`..."
Ed in questo caso non potrei che concordare con te al 1000 per 1000.
Cordialmente,


Il concetto di implementazione, a questo punto, e' del tutto soggettivo.
Ah, come lo usi tu, lo e` di certo!
Vabbe`, inutile smantellare una per una tutte le tue asserzioni
dalla prima all'ultima, tanto sono piu` o meno tutte dello stesso
brillante livello intellettuale di questa prima sulla "trasparenza"
e la "soggettivita`" del "concetto di implementazione"...!
Comunque, tanto per chiarire un po' le idee ad altri lettori che
possano trarne qualche beneficio:
--  su DOS, system("DIR") funzionera` con alcuni compilatori
    e relative librerie runtime, ma system("COMMAND /C DIR")
    funzionera` in tutti questi casi PIU` quelli di altri (vecchi)
    compilatori, quindi, checche` Laforgia blateri, e` costrutto
    piu` portabile e quindi tutt'altro che ridondante o inutile;
--  un modo veramente portabile di cambiare directory in C
    non c'e`, comunque quello che piu` vi si avvicina e` la
    funzione chdir (non ANSI, ma almeno POSIX, e usabile
    normalmente anche nei compilatori Microsoft, ecc, a
    patto di abilitare le estensioni rispetto all'ANSI);
--  dubitare di qualcosa significa, alla lettera, non essere
    convinto che quella cosa sia vera (usato, con tipico
    understatement, anche per significare che si e` del
    tutto certi che non lo sia).
Alex