wartość zwracana

Transkrypt

wartość zwracana
Spis treści
execl, execlp, execle, execv, execvp − uruchomienie pliku ................................................................. 2
SKŁADNIA .................................................................................................................................... 2
OPIS ................................................................................................................................................ 2
WARTOŚĆ ZWRACANA .............................................................................................................. 3
fork - utworzenie procesu potomnego ................................................................................................. 3
SKŁADNIA .................................................................................................................................... 3
OPIS ................................................................................................................................................ 3
WARTOŚĆ ZWRACANA .............................................................................................................. 3
calloc, malloc, free, realloc - przydziela i zwalnia pamięć dynamiczną .............................................. 3
SKŁADNIA .................................................................................................................................... 3
OPIS ................................................................................................................................................ 4
WARTOŚĆ ZWRACANA .............................................................................................................. 4
wait, waitpid - oczekiwanie na zakończenie procesu .......................................................................... 4
SKŁADNIA .................................................................................................................................... 4
OPIS ................................................................................................................................................ 4
WARTOŚĆ ZWRACANA .............................................................................................................. 6
strcmp, strncmp – porównuje dwa ciągi znaków ................................................................................. 6
SKŁADNIA .................................................................................................................................... 6
OPIS ................................................................................................................................................ 6
WARTOŚĆ ZWRACANA .............................................................................................................. 6
_exit, _Exit - zakończenie bieżącego procesu ..................................................................................... 6
SKŁADNIA .................................................................................................................................... 6
OPIS ................................................................................................................................................ 7
atoi, atol, atoll, atoq - przekształcenie łańcucha na wartość całkowitą ................................................ 7
SKŁADNIA .................................................................................................................................... 7
OPIS ................................................................................................................................................ 7
WARTOŚĆ ZWRACANA .............................................................................................................. 7
getrlimit, getrusage, setrlimit - pobranie/ustawienie limitów i zużycia zasobów ................................ 7
SKŁADNIA .................................................................................................................................... 7
OPIS ................................................................................................................................................ 8
Dodatkowe zalecenia ........................................................................................................................... 8
execl, execlp, execle, execv, execvp − uruchomienie pliku
SKŁADNIA
#include <unistd.h>
extern char **environ;
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg , ..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
OPIS
Rodzina funkcji exec zastępuje w pamięci obraz aktualnego procesu obrazem nowego procesu.
Funkcje opisane na tej stronie man są tylko nakładkami dla funkcji execve(2). (Dodatkowych
informacji na temat nadpisywania aktualnego procesu szukaj na stronie man tej funkcji.)
Pierwszym argumentem tych funkcji jest ścieżka do pliku, który ma być uruchomiony.
Kolejne wyrażenia const char *arg w funkcjach execl, execlp, i execle można traktować jako arg0,
arg1, ..., argn. Razem opisują one listę jednego lub więcej wskaźników do zakończonych znakiem
NUL łańcuchów, reprezentujących listę argumentów udostępnoianych wykonywanemu programowi.
Pierwszy argument, zgodnie z konwencją, powinien wskazywać na nazwę pliku powiązaną z
wykonywanym plikiem. Lista argumentów musi być zakończona wskaźnikiem NULL.
Funkcje execv oraz execvp udostępniają tablicę wskaźników do zakończonych znakami NUL
łańcuchów, które reprezentują listę argumentów dostępnych dla wykonywanego programu. Pierwszy
argument, zgodnie z konwencją, powinien wskazywać na nazwę pliku powiązaną z wykonywanym
plikiem. Tablica wskaźników musi być zakończona wskaźnikiem NULL.
Funkcja execle dodatkowo określa środowisko wykonywanego procesu poprzez dodanie po
wskaźniku NULL, kończącym listę argumentów w liście parametrów lub po tablicy argv
dodatkowego argumentu. Tym dodatkowym argumentem jest tablica wskaźników do zakończonych
znakami NUL łańcuchów, która to tablica musi być zakończona wskaźnikiem NULL. Pozostałe
funkcje pobierają środowisko dla nowego procesu z zewnętrznej zmiennej environ aktualnego
procesu.
Niektóre z tych funkcji mają specyficzną semantykę.
Funkcje execlp oraz execvp wykonują zadania powłoki szukając pliku wykonywalnego, jeśli nazwa
pliku nie zawiera znaku ukośnika (/). Ścieżka przeszukiwania to ścieżka podana w zmiennej
środowiskowej PATH. Jeśli zmienna ta nie istnieje, przyjmowana jest domyślna ścieżka
‘‘:/bin:/usr/bin’’. Dodatkowo pewne błędy traktowane są odmiennie.
Jeśli dostęp do pliku został zabroniony (wywołanie execve zwróciło EACCES), funkcje te będą
przeszukiwać resztę ścieżki. Jeśli jednak nie odnajdą innego pliku, powrócą i zmienią wartość
zmiennej globalnej errno na EACCES.
Jeśli nagłówek nie zostanie rozpoznany (wywołanie execve zwróci ENOEXEC), funkcje te spróbują
uruchomić powłokę ze ścieżką do pliku jako pierwszym argumentem. (Jeśli i ta próba się nie
powiedzie, przeszukiwanie jest zakończone.)
WARTOŚĆ ZWRACANA
Jeśli dowolna z funkcji exec powróci, oznacza to że nastąpił błąd. Zwracana jest wartość −1 i
ustawiana jest zmienna globalna errno aby wskazać błąd.
fork - utworzenie procesu potomnego
SKŁADNIA
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
OPIS
fork tworzy proces potomny, który różni się od procesu macierzystego jedynie swoimi numerami
PID i PPID oraz tym, że w rzeczywistości użycie przez niego zasobów jest ustawione na 0. Blokady
plików i oczekujące sygnały nie są dziedziczone.
Pod Linuksem fork funkcja jest zaimplementowana za pomocą kopiowania stron pamięci przy
zapisie, więc jedynymi mankamentami fork są czas i pamięć wymagane do powielenia tablic stron
rodzica i utworzenia unikalnej struktury zadania dla potomka.
WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu, w procesie macierzystym zwracany jest PID procesu potomnego, a w
procesie potomnym zwracane jest 0. Po błędzie zwracane jest -1 w kontekście rodzica, nie jest
tworzony procesie potomny i odpowiednio ustawiane jest errno.
calloc, malloc, free, realloc - przydziela i zwalnia pamięć dynamiczną
SKŁADNIA
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t size);
OPIS
calloc() przydziela pamięć dla tablicy zawierającej nmemb elementów, każdy o rozmiarze size
bajtów i zwraca wskaźnik do przydzielonej pamięci. Pamięć jest zerowana.
malloc() przydziela size bajtów i zwraca wskaźnik do przydzielonej pamięci.
Pamięć nie jest
czyszczona.
free() zwalnia obszar pamięci wskazywany przez ptr, który został wcześniej przydzielony za pomocą
wywołania malloc(), calloc() lub realloc(). W przeciwnym przypadku, lub gdy free(ptr) zostało
już wcześniej wywołane, funkcja zachowa się w sposób nieokreślony. Jeśli ptr jest równe NULL,
nie zostanie wykonana żadna operacja.
realloc() zmienia rozmiar bloku pamięci wskazywanego przez ptr na size bajtów. Zawartość nie
zostanie zmieniona w zakresie poniżej minimum ze starego i nowego rozmiaru; nowo przydzielona
pamięć nie zostanie zainicjalizowana. Jeśli ptr jest równe NULL, to wywołanie jest
równoważne malloc(size); jeśli size jest równe zeru, to wywołanie jest równoważne free(ptr). O
ile ptr nie jest równe NULL, musi ono być zwrócone przez wcześniejsze wywołanie malloc(),
calloc() lub realloc().
WARTOŚĆ ZWRACANA
Dla calloc() i malloc(), zwracana wartość jest wskaźnikiem do przydzielonej pamięci, który jest
właściwie wyrównany dla dowolnego rodzaju zmiennej, lub NULL gdy żądanie zakończyło się
niepowodzeniem.
free() nie zwraca żadnej wartości.
realloc() zwraca wskaźnik do nowoprzydzielonej pamięci, który jest właściwie wyrównany dla
dowolnego rodzaju zmiennej i może być różny od ptr, lub NULL gdy żądanie zakończy się
niepowodzeniem. Jeśli rozmiar był równy 0, zwracane jest NULL lub wskaźnik odpowiedni do
przekazania go funkcji free(). Gdy realloc() zakończy się niepowodzeniem, pierwotny blok zostaje
nienaruszony - nie jest on ani zwalniany ani przesuwany.
wait, waitpid - oczekiwanie na zakończenie procesu
SKŁADNIA
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
OPIS
Funkcja wait zatrzymuje wykonywanie bieżącego procesu aż do zakończenia procesu potomka lub
aż do dostarczenia sygnału kończącego bieżący proces lub innego, dla którego wywoływana jest
funkcja obsługi sygnału. Jeśli potomek zakończył działanie przed wywołaniem tej funkcji (tak
zwany proces-duch - "zombie"), to funkcja kończy się natychmiast. Wszelkie zasoby potomka są
zwalniane.
Funkcja waitpid zawiesza wykonywanie bieżącego procesu dopóki potomek określony przez pid
nie zakończy działania lub dopóki nie zostanie dostarczony sygnał, którego akcją jest zakończenie
procesu lub wywołanie funkcji obsługującej sygnały. Jeśli potomek, podany jako pid, zakończył
swoje działanie przed wywołaniem tej funkcji (tak zwany proces "zombie"), funkcja kończy się
natychmiast. Wszelkie zasoby potomka są zwalnianie.
Wartość pid może być:
< -1 co oznacza oczekiwanie na dowolny proces potomny, którego ID grupy procesów jest równy
wartości bezwzględnej pid.
-1 co oznacza oczekiwanie na dowolny proces potomny; jest to takie samo zachowanie, jakie
wykazuje wait.
0
co oznacza oczekiwanie na każdy proces potomny, którego ID grupy procesu jest równe ID
grupy procesu wywołującego funkcję.
>0
oznacza oczekiwanie na potomka, którego ID procesu jest równy wartości pid.
Wartość options jest sumą OR zera lub więcej spośród następujących stałych:
WNOHANG
pracy.
oznacza natychmiastowy powrót z funkcji, jeśli potomek nie zakończył
WUNTRACED
oznacza zakończenie także dla zatrzymanych (ale nie śledzonych)
procesów potomnych, których stan jeszcze nie został zgłoszony. Stan śledzonych procesów
potomnych, które zostały zatrzymane, jest udostępniany również bez tej opcji.
(Poniższe opcje dotyczą wyłącznie Linuksa.)
Jeśli status nie jest równe NULL, wait lub waitpid zapisuje dane o stanie w buforze wskazywanym
przez status.
Stan ten można zanalizować następującymi makrami (makra te pobierają jako argument bufor stat
(typu int), -- nie wskaźnik do bufora!):
WIFEXITED(status)
jest niezerowe, jeśli potomek normalnie zakończył pracę.
WEXITSTATUS(status)
analizuje
osiem
najmniej znaczących bitów kodu powrotu
zakończonego potomka, które mogły być ustawione jako argument wywołania exit() lub jako
argument instrukcji return w programie głównym. Makro to może być przetworzone, tylko jeśli
WIFEXITED zwróciło wartość niezerową.
WIFSIGNALED(status)
zwraca prawdę, jeśli proces potomny zakończył pracę z powodu
nieprzechwyconego sygnału.
WTERMSIG(status)
zwraca numer sygnału, który spowodował zakończenie procesu
potomnego. Makro to może być przetworzone, tylko jeśli WIFSIGNALED zwróciło wartość
niezerową.
WIFSTOPPED(status)
zwraca prawdę, jeśli proces potomny jest obecnie zatrzymany; jest to
możliwe tylko gdy w wywołaniu użyto WUNTRACED oraz gdy proces potomny jest śledzony
(zobacz ptrace(2)).
WSTOPSIG(status)
zwraca numer sygnału, który spowodował zatrzymanie potomka.
Makro to może być przetworzone, tylko jeśli WIFSTOPPED zwróciło wartość niezerową.
Niektóre wersje Uniksa (np. Linux, Solaris, ale nie AIX, SunOS) definiują także makro
WCOREDUMP(status)
sprawdzające, czy proces potomny dokonał zrzutu pamięci. Należy go
używać tylko pomiędzy dyrektywami kompilatora #ifdef WCOREDUMP ... #endif.
WARTOŚĆ ZWRACANA
PID zakończonego potomka lub zero, jeśli użyto WNOHANG, a nie było dostępnego żadnego
potomka, albo -1 w przypadku błędu (w tym ostatnim wypadku odpowiednia wartość jest nadawana
errno).
strcmp, strncmp – porównuje dwa ciągi znaków
SKŁADNIA
#include <string.h>
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
OPIS
Funkcja strcmp() porównuje dwa stringi, s1 i s2. Zwraca integer mniejszy niż, równy lub większy od
zera jeśli s1 jest odpowiednio mniejszy, równy lub większy od s2.
Funkcja strncmp() działa podobnie, lecz porównuje tylko pierwsze n bajtów s1 i s2
WARTOŚĆ ZWRACANA
Funkcje strcmp() oraz strncmp() zwracają liczbę całkowitą mniejszą, równą lub większą od zera jeśli
s1 (lub pierwsze n jego bajtów) jest odpowiednio: mniejsze, równe lub większe od s2.
_exit, _Exit - zakończenie bieżącego procesu
SKŁADNIA
#include <unistd.h>
void _exit(int status);
#include <stdlib.h>
void _Exit(int status);
OPIS
Funkcja _exit "natychmiast" kończy proces, z którego została wywołana. Wszystkie przynależące
do procesu otwarte deskryptory plików są zamykane; wszystkie jego procesy potomne są
przejmowane przez proces 1, init, a jego proces macierzysty otrzymuje sygnał SIGCHLD.
Wartość status jest zwracana procesowi macierzystemu jako kod zakończenia procesu wywołującego
tę funkcję i może zostać odczytana za pomocą jednej z funkcji z rodziny wait.
Funkcja _Exit jest równoważna _exit.
atoi, atol, atoll, atoq - przekształcenie łańcucha na wartość całkowitą
SKŁADNIA
#include <stdlib.h>
int atoi(const char *nptr);
long atol(const char *nptr);
long long atoll(const char *nptr);
long long atoq(const char *nptr);
OPIS
Funkcja atoi() przekształca początkową część łańcucha wskazywanego przez nptr na int. Działa tak
samo, jak
strtol(nptr, (char **)NULL, 10);
z wyjątkiem tego, że atoi() nie wykrywa błędów.
Funkcje atol() i atoll() zachowują się tak samo, jak atoi, z tym wyjątkiem, że przekształcają
początkową część przekazanego im łańcucha na - w zależności od typu zwracanego przez te funkcje
- odpowiednio long oraz long long. atoq() jest przestarzałą nazwą dla atoll().
WARTOŚĆ ZWRACANA
Zwracany jest wynik przekształcenia.
getrlimit, getrusage, setrlimit - pobranie/ustawienie limitów i zużycia
zasobów
SKŁADNIA
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
int getrlimit(int resource, struct rlimit *rlim);
int getrusage(int who, struct rusage *usage);
int setrlimit(int resource, const struct rlimit *rlim);
OPIS
getrlimit i setrlimit odpowiednio pobierają i ustawiają limity zasobów.Z każdym z zasobów
stowarzyszone jest miękkie i sztywne ograniczenie zdefiniowane w strukturze rlimit (argument rlim
w getrlimit() i setrlimit()):
struct rlimit {
rlim_t rlim_cur;
rlim_t rlim_max;
/* ograniczenie miękkie */
/* ograniczenie sztywne (górna
granica dla rlim_cur) */
};
Ograniczenie miękkie jest wartością odpowiedniego zasoby wymuszną przez jądro. Ograniczenie
sztywne działa jak wartość
maksymalna
dla ograniczenia miękkiego: proces
nieuprzywilejowany może sobie ustawić ograniczenie miękkie tylko w zakresie od 0 do ograniczenia
sztywnego oraz (nieodwracalnie) obniżyć swoje ograniczenie sztywne. Proces uprzywilejowany
może dowolnie zmieniać każdą z wartości ograniczenia.
Dodatkowe zalecenia
Zapoznajcie się dodatkowo z argumentami programów w C, zmiennymi argc i argv.

Podobne dokumenty