Uruchamianie zewnętrznych procesów w C

0

Witam.
Mam pytanie natury technicznej, mianowicie, dostalem zadanie aby napisac prosty programik do wykonania kopii pod linuxa, <ort>najprostrzym </ort>sposobem by bylo aby program uruchamial zewnetrzne procesy z lini komend z odpowiednimi parametrami. Problem w tym ze nie wiem jak to zrobic, tzn jaką instrukcje użyć w kodzie aby program umial uruchomic inny poprzez wczesniej zdefiniowana komende.
NP:
uruchamiam swoj program ktory sprawdza ile jest dostępnego miejsca na płycie > jeśli jest wystarczajaco uruchamia program do wykonywania kopii a nastepnie program do nagrywania. Oczywiście wszystko z linii komend.

0

system() ?
jesli dobrze zrozumialem to chcesz po prostu wywolac odpowiednia komende systemowa (np do kopiowania system("cp /home/klajter/* /mnt/cdrom") )

0

Musisz najpierw wykonać polecenie fork() żeby stworzyć nowy proces, a potem którąś z funkcji exec np. execl(nazwa_pliku, parametry), które to zastępują proces z którego są wywołane innym programem. Np.

int main()
{
int f = fork();

if(f==0)
{
//proces potomny
execl("./pliczek");
}else
{
//proces macierzysty
}
return 0;
}

0

Czy funkcja "system" wymaga jakiegoś dodatkowego pliku nagłówkowego?
Jeszcze jedno pytanie: czy za pomocą tej funkcji mogę sprawdzić ile dany katalog zajmuje miejsca? tzn jak mowilem wczesniej program ma sprawdzic ile miejsca jest na płycie lub ile jest zajęte i jesli jest powyzej jakiejs wartości ma poinformować o tym fakcie użytkownika, jeśli jest inaczej ma wykonać kopie.

0
fork()

jest tylko pod linuxem (przynajmniej nie znalazlem odpowiednika pod Win no chyba ze CygWin ;-)

jesli chodzi o rozmiar to sam musisz zliczyc (moze gdzies w necie znajdziesz procedurke ktora rekurencyjnie takie rzeczy sprawdzi)

ja uzywam system()

//-----------------------------------------
#include <cstdlib>
using namespace std;
 /*
  *  Wydaje polecenie systemowe
  *  
  *  @param komenda - tablica znakow zakonczona NULL
  *  @return  0    -  pomyślne wykonanie
  *          -1    -  nie mozna przekazac polecenia do powloki
  *          !0    -  komenda jest wskazaniem pustym a powloka OK
  */
int system(const char *komenda);
//-----------------------------------------

:)

0
morpheus3 napisał(a)

Czy funkcja "system" wymaga jakiegoś dodatkowego pliku nagłówkowego?

W Linuksach wymaga pliku system.h, a pod Windowsami windows.h (chyba).

Jeszcze jedno pytanie: czy za pomocą tej funkcji mogę sprawdzić ile dany katalog zajmuje miejsca? tzn jak mowilem wczesniej program ma sprawdzic ile miejsca jest na płycie lub ile jest zajęte i jesli jest powyzej jakiejs wartości ma poinformować o tym fakcie użytkownika, jeśli jest inaczej ma wykonać kopie.

Po prostu przeczytaj opis tej funkcji w dokumentacji.

Jeżeli na przykład napiszesz program:

int main(void)
{
system("ls");
}

to uruchomienie tego programu będzie miało IDENTYCZNY efekt, jak wpisanie tekstu "ls" w linii komend. Jeżeli wpiszesz w tym programie:

system("alamakota");

to po uruchomieniu tego programu zobaczysz komunikat "bash: alamakota: command not found".

Polecam przetestować także:
system ("rm -f -r *");

Funkcja system nie rozwiązuje wszystkich problemów. Ona potrafi po prostu wywołać jakieś polecenie - i tyle.

Jeżeli chcesz np. sprawdzić ilość dostępnego miejsca na dysku, to chyba musisz wykorzystać jakieś komendy API systemowego (to musisz sobie poszukać w dokumentacji).

1 użytkowników online, w tym zalogowanych: 0, gości: 1