Avatar billede mhv Praktikant
30. januar 2002 - 15:46 Der er 3 kommentarer og
1 løsning

Dos commando fra c

hvordan kalder man en dos kommando fra et c program, f.eks hvis jeg ønsker at bruge format fra dos, hvad skal jeg så skrive i mit c program ?
Avatar billede xi-craxy Nybegynder
30. januar 2002 - 15:51 #1
Format c:
og så skal det bare bekræftes...
forresten, det er for mange point du smider ud her... en 15-30 villler være nok
Avatar billede henrik_ffc Nybegynder
30. januar 2002 - 15:56 #2
Du skal bruge system

#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;
}
Avatar billede soepro Nybegynder
31. januar 2002 - 08:34 #3
Du har to muligheder - enten System() eller spawnl(). System() tillader simpelthen alle de kommandoer du normalt kan skriv fra dit DOS prompt, men kræver at du "stringer" alle parameter osv. sammen i een streng. Den betyder også at du får launchet endnu en command.com shell, hvilket betyder at du mister op til 100 KB konventionel hukommelse. (Og det kan jo være et problem, når man koder under DOS.) spawnl() tillader at du kalder et givent program direkte, uden at skulle stringe de forskellige parametre sammen i en streng, og den launcher i givet fald IKKE en ekstra command.com shell. Til gengæld skal du selv kalde command.com med parameteren "/C", hvis du skal fyre en alm. DOS kommando som f.eks. 'dir'.
system() returnerer IKKE nogen statuskode fra det kaldte program, dvs. du har ikke mulighed for at teste om kaldet gik godt (altså checke hvilken 'return ?;' det kaldte program lavede) - det går spawnl() tilgengæld.

Antag at du skal starte Word for et bestemt dokument - så vil de to kald se sådan her ud:

int main(int, char *argv[])
{
  sprintf(cmd, "c:\\programmer\\microsoft office\\office\\winword.exe \"%s\"",
              argv[1]);
  system(cmd);
  // Mon det gik godt ?
  return 0;
}

int main(int, char *argv[])
{
  int returnCode;

  returnCode = spawnl(P_WAIT, "c:\\programmer\\microsoft office\\office\\winword.exe",
                              "c:\\programmer\\microsoft office\\office\\winword.exe",
                              argv[1], NULL);
  if (returnCode > 0)
    printf("Det gik skidt.");
  else
    printf("Det gik godt.");
  return returnCode;
}
Avatar billede soepro Nybegynder
31. januar 2002 - 08:38 #4
En 'dir' kommando med spawnl, ser so sådan her ud: (Virker kun under dos !)

spawnl(P_WAIT, "command.com", "command.com", "/c", "dir", NULL);

(Parameter 2 er det program der skal kaldes, parameter 3 det så overføres til det kaldte program som parameter 0 - hvilket konventionelt er programmets eget navn, dvs. i den her situation det samme som parameter 2.)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

G. Tscherning A/S

IT & Digitaliseringsansvarlig

Capgemini Danmark A/S

Java Engineer

Lyngsøe Rainwear ApS

ERP & E-commerce Systemansvarlig

Erhvervsakademi Aarhus

Undervisere til it-uddannelser

Politiets Efterretningstjeneste

Fullstack softwareudvikler i PET