Funkcja execvp w c

Funkcja execvp w c

Funkcja execvp () należy do rodziny Exec. W dzisiejszym temacie omówimy cechy i zastosowanie funkcji execVP () w ramach Exec Family.

Funkcja Exec Family w języku C pomaga nam realizować inne programy w naszym programie. Aby to zrobić z mojego programu, używamy zestawu funkcji o nazwie Exec Family of Function i są one w programie Linux.

Zastosowanie funkcji execvp ()

Jeśli chcemy wykonać ping programu, możemy zastosować to za pośrednictwem funkcji execvp (). W tym celu musimy użyć tablicy. Litera „v” używana dla funkcji execVp () oznacza wektor.

Składnia

Składnia funkcji execvp ():

int execvp (const char *plik, char *const)

Tutaj pierwszym parametrem jest wskaźnik pliku, który wskazuje plik, który ma zostać wykonany w programie.

Drugi parametr to stała wskaźnika, która ma charakter i będzie używany jako terminator zerowy.

Przykład programowania 1

Tutaj zobaczymy, jak funkcja execvp () faktycznie działa w naszym programie.

#włączać
#włączać
#włączać
#include // w tym plik dla platformy Linux
int main (int argc, char *argv [])

char *ar [10] = „ping”, „Google.com ","-c10 ", null; // deklaracja i inicjalizacja tablicy
execvp („ping”, ar);
printf („Nie otrzymuje żadnej odpowiedzi, ponieważ funkcja execvp () wykonuje najpierw \ n”
// To instrukcja nie działa, ponieważ execvp () przejmuje kontrolę nad programem, jeśli execvp zwrócił sukces.
powrót 0;

Wyjście

Wyjaśnienie
W tym przykładzie programowania, jeśli chcemy pingować „Google.com ”Z funkcją execVP () na platformie Linux musimy dołączyć plik nagłówka o nazwie unistd.H w naszym programie.

Aby wykonać funkcję execVP (), musimy zadeklarować tablicę (faktycznie tablicę ciągu) o nazwie AR [] i zainicjować niektóre wartości, takie jak „ping”, Google.com ”i null.

Teraz, jeśli spróbujemy przekazać tablicę argumentu wewnątrz funkcji funkcji execvp ().com jako wyjście.

Przykład programowania 2

Tutaj pokazujemy kolejną aplikację funkcji execVP ().

#include // w tym plik dla platformy Linux
#włączać
#włączać
#włączać
int main ()

char *cmd = "cd";
char *ar_ls [] = "cd", "/root/nic", null; // deklaracja i inicjalizacja tablicy
errno = 0;
int id = execvp (cmd, arr_ls);
if (id == -1)

printf („\ nhere to numer błędu zwrócony przez execvp:%d \ n”, errno);
if (errno == 2)
printf ("!!Brak takiego pliku lub katalogu!!\N");
w przeciwnym razie
Perror („execvp”);

printf („Jeśli execVP zwróci sukces, nie zobaczymy tego wiersza, zobaczymy ten wiersz. \N " ) ;
powrót 0;

Wyjście

Wyjaśnienie
W tym przykładzie programowania zobaczymy, czy funkcja execVP () zwróci wartość fałszywą. Jeśli funkcja execvp () zwraca wartość fałszywą, wówczas wydrukowała wartość „Errorno ” który jest 2 i wydrukuj wiadomość „Brak takiego pliku lub katalogu”.

Jeśli funkcja execvp () zwraca wartość prawdziwą, każda instrukcja po execVP nie zostanie uruchomiona. Jak wiemy z charakterystyki funkcji execVP (), nikt nie jest wykonywany, gdy funkcja execvp () przejmuje kontrolę nad programem.

Przykład programowania 3

W tym przykładzie programowania zobaczymy ważne zastosowanie funkcji execVp () związanej z Fork () lub procesem.

#włączać
#włączać
int main ()

char *cmd = "ls";
char *arg_ls [] = „ls”, „-l”, null;
printf („Przykład wykonania instrukcji przed execvp () jest wywoływany \ n”);
printf („Wprowadzamy jeszcze jeden proces wskazujący widelc \ n”);
if (Fork () == 0) // Proces dziecka jest kontrolowany przez „LS-L”

int sts_cd = execvp (cmd, arg_ls);
printf („To instrukcja wykonuje, co oznacza, że ​​istnieje problem z uruchomieniem polecenia \ n”);
if (sts_cd == -1)

printf („Błąd execVP! \N" ) ;
zwrot 1;


Else // Program nadrzędny uruchom tutaj

printf („Ta instrukcja jest realizowana, co oznacza powrót do programu głównego \ n”);

powrót 0;

Wyjście

Wyjaśnienie
Podobnie jak wszystkie funkcje Exec Family w C, funkcja execvp () może wykonywać inne programy w naszym programie.

W tym przykładzie programowania deklarujemy tablicę znaków lub nazwę ciągu arg_ls []. Wewnątrz tego ciągu inicjujemy również niektóre wartości i null. Następnie nazywamy inny proces wywołany Fork ().

Tutaj funkcja execvp () zwraca wartość prawdziwą. Tak więc funkcja Fork () może z powodzeniem wykonać swoją działanie. Jeśli nie, to trafi do programu głównego.

Przykład programowania 4

Tutaj zobaczymy inną funkcję funkcji execvp ().

#włączać
#włączać
int main ()

char *cmd = "cd";
char *arg_ls [] = "cd", "/root/bam", null;
printf („Przykład wykonania instrukcji przed execvp () jest wywoływany \ n”);
printf („Wprowadzamy jeszcze jeden proces wskazujący widelc \ n”);
if (Fork () == 0) // Proces dziecka jest kontrolowany przez „LS-L”

int sts_cd = execvp (cmd, arg_ls);
printf („To instrukcja wykonuje, co oznacza, że ​​istnieje problem z uruchomieniem polecenia \ n”);
if (sts_cd == -1)

printf („Błąd execVP! \N" ) ;
zwrot 1;


Else // Program nadrzędny uruchom tutaj

printf („Ta instrukcja jest realizowana, co oznacza powrót do programu głównego \ n”);

powrót 0;

Wyjście

Wyjaśnienie
Powyższym przykładem programowania jest zmodyfikowana wersja programu 3. Tutaj zobaczymy, czy Funkcja Fork () zwróci „0”. Następnie proces dziecka wykona ich kod i jest kontrolowany przez „LS-” L Komenda. Wartość, która zwróci execVP (), jest przypisana do zmiennej wymienionej STS_CD. Jeśli STS_CD zobaczymy wartość -1, a następnie zrozumiemy, że jest to błąd funkcji execVP (). W przeciwnym razie ta funkcja przejmuje kontrolę nad resztą programu.

Wniosek

Z powyższej dyskusji na temat implementacji execvp () w rodzinie Exec, doszliśmy do wniosku, że zastępuje obraz procesu nowym obrazem w naszym pamięci RAM (pamięć o dostępie losowej), aby wykonać nowy proces. W rzeczywistości ta funkcja pomaga naszemu systemowi operacyjnym w zarządzaniu wszystkimi procesami gotowymi do wykonania przez procesor przy mniejszym czasie.