Portál AbcLinuxu, 12. května 2025 06:54

Dotaz: spusteni scriptu z programu (C)

Pavel Dobeš avatar 20.4.2005 21:28 Pavel Dobeš | skóre: 21 | Praha
spusteni scriptu z programu (C)
Přečteno: 173×
Odpovědět | Admin
zdravim,

chtel bych pridat do jednoho programu spusteni externiho scriptu.

Kdyz dam

execv("/home/pavel/bin/script.sh", 0, 0 );

tak se mi akorat povede spustit script misto prgramu. A kdyz pred to dam fork(), tak se spusti script 2x. Je to asi trivialita, ale nejak se mi nepodarilo zjistit, jak to udelat.
Windows? A kdo to ještě používá?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

20.4.2005 21:31 Michal Kubeček
Rozbalit Rozbalit vše Re: spusteni scriptu z programu (C)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejlepší bude přečíst si v dokumentaci, co vlastně přesně dělá execv() a fork(), např. info dokumentace k glibc to vysvětluje dost názorně a jsou tam i příklady.
20.4.2005 21:31 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: spusteni scriptu z programu (C)
Odpovědět | | Sbalit | Link | Blokovat | Admin
použít system(), pokud chcete vstup/výstup, tak popen()
20.4.2005 21:34 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: spusteni scriptu z programu (C)
Odpovědět | | Sbalit | Link | Blokovat | Admin
a přečíst si příklad z info glibc: :-)
     #include <stddef.h>
     #include <stdlib.h>
     #include <unistd.h>
     #include <sys/types.h>
     #include <sys/wait.h>

     /* Execute the command using this shell program.  */
     #define SHELL "/bin/sh"

     int
     my_system (const char *command)
     {
       int status;
       pid_t pid;

       pid = fork ();
       if (pid == 0)
         {
           /* This is the child process.  Execute the shell command. */
           execl (SHELL, SHELL, "-c", command, NULL);
           _exit (EXIT_FAILURE);
         }
       else if (pid < 0)
         /* The fork failed.  Report failure.  */
         status = -1;
       else
         /* This is the parent process.  Wait for the child to complete.  */
         if (waitpid (pid, &status, 0) != pid)
           status = -1;
       return status;
     }

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.