Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.os.linux.programowanie > #2087 > unrolled thread

Jaka funkcja jak system() ale z podawaniem katalogu roboczego?

Started byBorneq <borneq@antyspam.hidden.pl>
First post2017-02-01 12:55 +0100
Last post2017-02-01 17:16 +0100
Articles 3 — 2 participants

Back to article view | Back to pl.comp.os.linux.programowanie


Contents

  Jaka funkcja jak system() ale z podawaniem katalogu roboczego? Borneq <borneq@antyspam.hidden.pl> - 2017-02-01 12:55 +0100
    Re: Jaka funkcja jak system() ale z podawaniem katalogu roboczego? gof@somewhere.invalid (Adam Wysocki) - 2017-02-01 15:59 +0000
      Re: Jaka funkcja jak system() ale z podawaniem katalogu roboczego? Borneq <borneq@antyspam.hidden.pl> - 2017-02-01 17:16 +0100

#2087 — Jaka funkcja jak system() ale z podawaniem katalogu roboczego?

FromBorneq <borneq@antyspam.hidden.pl>
Date2017-02-01 12:55 +0100
SubjectJaka funkcja jak system() ale z podawaniem katalogu roboczego?
Message-ID<o6sibv$f31$2@node1.news.atman.pl>
system() pozwala na wołanie basha z komendą i czekanie na zakończenie. 
Jednak jest prosta a ja potrzebuję dać jako parametr katalog w którym ma 
być to wykonywane. Nie chcę przed wywołaniem używać chdir().
Może funkcje z rodziny execNNN, na przykład execlp? Funkcja ta pozwala 
szukać programu po PATH, jednak ja chcę uruchomić powłokę.

[toc] | [next] | [standalone]


#2088

Fromgof@somewhere.invalid (Adam Wysocki)
Date2017-02-01 15:59 +0000
Message-ID<2eTd7vlduI38hNv8%gof@news.chmurka.net>
In reply to#2087
Borneq <borneq@antyspam.hidden.pl> wrote:

> system() pozwala na wołanie basha z komendą i czekanie na zakończenie. 
> Jednak jest prosta a ja potrzebuję dać jako parametr katalog w którym ma 
> być to wykonywane. Nie chcę przed wywołaniem używać chdir().
> Może funkcje z rodziny execNNN, na przykład execlp? Funkcja ta pozwala 
> szukać programu po PATH, jednak ja chcę uruchomić powłokę.

fork

W childzie (gdy fork zwrocil 0):

chdir
exec*

W parencie (gdy fork zwrocil >0):

waitpid

-- 
http://www.chmurka.net/

[toc] | [prev] | [next] | [standalone]


#2089

FromBorneq <borneq@antyspam.hidden.pl>
Date2017-02-01 17:16 +0100
Message-ID<o6t1kc$uk2$1@node1.news.atman.pl>
In reply to#2088
W dniu 01.02.2017 o 16:59, Adam Wysocki pisze:
> chdir
> exec*

zrobiłem:
dwa pierwsze parametry do ścieżka do shella a następny "-c"
void execSystem(string command, string workDir)
{
     const char *defShell="/bin/bash";
     const char* shellPath;
     shellPath = getenv ("SHELL");
     if (shellPath==NULL)
         shellPath = defShell;
     __pid_t pid = fork();
     int status;
     switch(pid)
     {
         case -1: exit(-1);
         case 0:
         {
             chdir(workDir.c_str());
             execlp(shellPath,shellPath,"-c" ,command.c_str(),NULL);
         }
         break;
         default:
         {
             waitpid(pid,&status,WUNTRACED);
         }
     }
}


[toc] | [prev] | [standalone]


Back to top | Article view | pl.comp.os.linux.programowanie


csiph-web