🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.os.linux.programowanie
3 messages
3 total messages Started by Borneq Wed, 01 Feb 2017 11:55
Jaka funkcja jak system() ale z podawaniem katalogu roboczego?
#72817
Author: Borneq
Date: Wed, 01 Feb 2017 11:55
5 lines
1213 bytes
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ę.
Re: Jaka funkcja jak system() ale z podawaniem katalogu roboczego?
#72818
Author: Adam Wysocki
Date: Wed, 01 Feb 2017 15:59
21 lines
1934 bytes
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/
Re: Jaka funkcja jak system() ale z podawaniem katalogu roboczego?
#72819
Author: Borneq
Date: Wed, 01 Feb 2017 16:16
30 lines
1669 bytes
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);
         }
     }
}
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads