Strona Główna Unixy.pl
Internetowe forum na temat systemów GNU/Linux Unix

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload
 Ogłoszenie 
Strona korzysta z plików cookies w celu realizacji usług (logowanie do konta itp.). Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.

Poprzedni temat «» Następny temat
Procesy w systemie linux, problem z zadaniem
Autor Wiadomość
rafalski

Dołączył: 20 Lis 2009
Posty: 1
Wysłany: 2009-11-20, 13:43   Procesy w systemie linux, problem z zadaniem

Witam. Nie mogę zrozumieć poniższego zadania, czy ktoś mógłby pomóc?

Kod:

Napisać program run_cmd pozwalający na uruchomienie innego programu przekazanego w linii poleceń wra z argumetami. Program taki powinien najpierw utworzyć proces potomny, a następnie przy pomocy jednej z funkcji exec uruchomić program odczytany z linii poleceń, przy czym przy poszukiwaniu takiego programu powinny być uwzględniane katalogi znajdujące się w zmiennej środowiskowej PATH. Proces macierzysty ma wypisać na ekranie najpierw swój PID, PID procesu potomnego, a następnie kod wyjścia procesu potomnego. Proces potomny przed wywołaniem funkcji exec wypisuje na ekranie swój PID oraz PID procesu macierzystego.

Przykład: wywołanie
./run_cmd ls -l -a

Powinno spowodować uruchomienie programu ls z parametrami -l i -a.



Napisałem taki kod:
Kod:

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
  int pid;
  pid=fork();
  printf("PID prosesu macierzystego %d\n", pid);
  if (pid<0)
  {
    fprintf(stderr, "Fork Failed");
    exit(-1);
  }
  else
    if (pid==0)
    {
      execlp("/bin/ls","ls",NULL);
      printf("PID prosesu potomnego %d\n", pid);
    }
     
    else
    {
      wait(NULL);
      printf("Child Complete");
      exit(0);
    }
};
 
     
Maciek_Rutecki 
Administrator

JID: bc547@jabber.gda.pl
Pomógł: 39 razy
Dołączył: 07 Cze 2005
Posty: 2959
Wysłany: 2009-11-20, 21:50   

Trochę nie mam czasu i program nie jest skończony, ale może stanowić bazę do dalszych poprawek:

Kod:
#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>

#define MAX_ARGS 10

struct thread_data{
   int  args_count;
   char *message[MAX_ARGS];
};


void* doCommand (void* ptr)
{
    struct thread_data *m = ptr;
    int i=0;

    printf("Watek: PID procesu glownego: %u\n",getppid());
    printf("Watek: PID watku: %u\n",getpid());
    printf("Watek: ID watku: %d\n",pthread_self());

    printf("Polecenie: ");
    for (i=0; i<(m->args_count);i++ )
    {
        printf("%s ", m->message[i]);
    }
    printf ("\n");

    execlp(m->message[0],m->message[0], NULL,0);
    return NULL;
}

int main(int argc, char* argv[])
{
    struct thread_data th_data;
    int i=1;

    if (argc<2)
    {
        return 1;
    }
    th_data.args_count=0;
    for (i=0; i<argc-1;i++)
    {
        if (i==MAX_ARGS)
            break;
        th_data.message[i]=argv[i+1];
        th_data.args_count=i+1;
    }
    pthread_t thread_id;
    printf("Main: PID procesu glownego: %u\n",getpid());
    printf("Main: ID procesu glownego: %d\n",pthread_self());
    pthread_create (&thread_id, NULL, &doCommand, &th_data);
    pthread_join (thread_id, NULL);
    return 0;
}
_________________
Maciek
http://www.maciek.unixy.pl
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group