Posx spawn z programowaniem C

Posx spawn z programowaniem C
Spawn jest funkcją stosowaną w POSIX do ładowania i wykonywania procesów dziecięcych. Obecnie uruchomiony proces w POSIX będzie kontynuowany lub nie będzie kontynuował tych procesów dziecięcych i innych procesów asynchronicznych. Ilekroć tworzony jest nowy podproces, wymaga pewnej konkretnej pamięci, która pozwoli na wykonanie procesu rodzica i dzieci. W Microsoft Windows, Unix i Linux istnieje pewna rodzina spawnów; a inne rodziny funkcji spawn są uważane za opcjonalne rozszerzenie.

Dlaczego warto używać posix spawn?

posix_spawn () I posix_spawnp () Oba funkcje są używane do tworzenia nowego procesu dziecka. Proces dziecka następnie wykonuje plik. Funkcje te zostały określone przez POSIX w celu standaryzacji metody tworzenia nowych procesów dla maszyn, które nie mają obsługi wywołania systemu widelca. Maszyny te są zwykle małe i brakuje wbudowanych systemów do obsługi LMMU.

Dwie funkcje łączą widelec i exec, z dodatkowymi krokami, które wykonają dziecko. Działają jako podzbiór funkcjonalności, zwykle osiągany za pomocą widelca, dla wszystkich wywołań systemowych i wbudowanych systemów, które nie mają takiej funkcjonalności.

Przykład 1: POSIX_spawn ()

W tym przykładzie użyjemy funkcji Spawn () do tworzenia i wykonania nowego procesu dziecka. Następnie wyjaśnimy wszystkie odpowiednie argumenty użyte w funkcji.

Argumenty użyte w przykładzie są następujące:

Argument Opis
Służy do zdefiniowania wszystkich operacji odrodzenia.
ścieżka Nazwa ścieżki, która ma zostać wykonana.
fd_count Liczba wpisów z tablicą fd_map. Jeśli fd_count jest równa 0, wówczas fd_map jest ignorowany. W takich przypadkach proces dziecięcy dziedziczy wszystkie deskryptory plików, ignorując te zmodyfikowane.
FD_MAP
Szereg deskryptorów plików, które mają zostać odziedziczone przez proces dziecka. Tutaj, jeśli wartość FD_Count nie wynosi 0, potrzebna jest FD_MAP, aby doprowadzić deskryptory plików FD_Count do najwyższej wartości Open_Max. To ma:

· Wkład procesu dziecka

· Wyjście

· Wartości błędów

dziedziczyć Dziedziczenie struktury pokazuje, że użytkownicy chcą, aby proces ich dziecka odziedziczył wszystko od rodzica.
Argv Wskaźnik do konkretnego wektora argumentu. Wartość Argv [0] nie może być zerowa i musi być załadowaną nazwą pliku. Wartość Argv nie może być równa NULL.
Envp Wskazuje na szereg wskazówek postaci. Każdy z wskaźników w tej tablicy wskazuje na zmienną środowiskową. Punkt końcowy tablicy to wskaźnik zerowy.

Przykład 2: Test.C

W poniższym przykładzie powstaje nowy proces dzieci, aby uruchomić polecenie /bin/sh -c. Jest to wartość przekazana jako pierwszy argument. test.C Kod jest następujący:

W powyższym przykładzie nazywaliśmy biblioteki, a następnie nazwaliśmy ikra.H nagłówek. Zobaczysz także posix_spawn () wywołane w celu utworzenia procesu dziecka w powyższym przykładzie. ikra I Spawnp funkcje są używane zamiast widelec I Exec Funkcje. Ikra() ma elastyczność i zapewnia użytkownikom wiele łatwości. Jest to trochę odmienne od system() I exec (). Wróci i stworzy proces świeżego dzieci. W naszym przykładzie jest to pid. Powyżej widać, że funkcja oczekiwania WaitPid (), Następnie system() Jest używane. Zauważ, że ikra() I widelec() Procesy wywołujące są takie same, a metoda implementacji jest mniej więcej taka sama dla obu funkcji.

Teraz wykonamy przykład za pomocą GCC kompilator. Możesz także użyć dowolnego innego wybranego kompilatora:

Test $ sudo gcc.c -Lrt

Następnie uruchom następujące:

$ ./A.na zewnątrz

Wyjście powyższego polecenia będzie wyglądać w następujący sposób:

Dziecko pid zostanie utworzony, jak widać na powyższym wyjściu.

Biblioteka

Libc: Użyj -l c, aby połączyć GCC kompilator. Zauważ tutaj, że ta biblioteka jest zawarta automatycznie.

Ikra()

ikra() Funkcja oparta jest na POSIX 1003.1D PROJEKT standardowy zastosowany jako posix_spawn (). Biblioteka C zawiera funkcje Spawn*(). Tutaj wymienimy kilka sufiksów wraz z ich opisami:

mi: używane jako tablica zmiennych środowiskowych.

L: używane jako zerowa lista argumentów używanych w programie.

P: używane do zdefiniowania względnej ścieżki. Jeśli ścieżka nie ma wartości w swojej wartości, system używa i przeszukuje zmienną środowiskową ścieżki dla dowolnego podobnego programu.

V: działa jako wektor argumentów w programie.

Mapowanie deskryptorów plików

W ikra(), Ćwiczymy fd_count I FD_MAP Argumenty, aby wywołać deskryptory plików. Określa, które dziecko dziedziczyć.

Liczba używana jako deskryptor pliku dla procesu dziecięcego zależy od jego lokalizacji wewnątrz FD_MAP. Tutaj rozważymy przykład rodzica z deskryptorami plików o wartości 1, 3 i 5, wówczas mapowanie będzie takie:

>> int fd_map = 1, 3, 5;
Dla dziecka Dla rodzica
0 1
1 3
2 5

Zauważ, że jeśli używasz jawnego FD_MAP Aby dopasować te deskryptory plików do dziecka i rodzica, musisz zmapować Spwan_fdclose funkcja do kontynuacji.

Flagi spadkowe

W odrodzeniu użytkownicy muszą wywołać dowolną z poniższych flag w przypadku dziedzictwa. Niektóre przykłady flag odradzania i ich opisów podano poniżej:

Flaga Opis
Spawn_align_default Ta flaga służy do skonfigurowania domyślnych ustawień konfiguracji do wyrównania.
Spawn_align_fault Ta flaga jest używana do niewspółosiowości błędów w odniesieniach do danych.
Spawn_align_nofault Ta flaga służy do naprawy niewspółosiowości usterki.
Spawn_debug Ta flaga służy do debugowania jądra.
Spawn_exec Spawn działa jak Exec*() za pomocą tej flagi.
Spawn_explit_cpu Ta flaga służy do ustawiania maski uruchomienia i odziedziczenia maski = członek Maski Run Mask.
Spawn_explit_sched Ta flaga służy do ustalenia zasady planowania.

<ikra.H> definiuje tę maskę Spawn_Align_Mask Służy do wyrównania flag wymienionych powyżej.

PID_T PGROUP Grupa procesów dla dzieci, jeśli określisz sPawn_SetGroup w członku flagi.
int Runmask Mash Process Process w celu odziedziczenia masek uzgodnionych na podstawie wartości tego członka.
sigset_t sigMask Maska sygnałowa dla procesu potomnego, który jest używany do określenia statusu elementów flagi.
sigset_t sigdefault Zestaw procesów dziecięcych domyślnych sygnałów.

Błędy

posix_spawn () I posix_spawnp () Funkcje mogą również zawodzić w niektórych przypadkach, takie jak następujące:

Einval: Tak jest, gdy wartość zidentyfikowana przez FILE_ACTIONS Lub attrp jest nieprawidłowe i odpowiednie.

Gdy widelec bazowy (2), widelec (2) lub klon (2) połączenie się nie powiedzie, ikra() Funkcje zwrócą numer błędu.

Enosys: Tak jest, jeśli funkcja i jej wsparcie nie są uwzględnione ani dostarczane w systemie.

Wniosek

Ten samouczek obejmował podstawowe funkcje dostarczone przez Posix_spawn () oraz funkcje używane przez IT do wykonywania i wykonywania jego funkcji. Omówiliśmy również flagi i błędy powszechnie używane przez spawn.