Provided by:
manpages-pl-dev_20060617-1_all 
NAZWA
intro - wprowadzenie do wywołań systemowych
OPIS
Ten dział opisuje wywołania systemowe Linuksa. Listę wszystkich 164
wywołań systemowych obecnych w jądrze 2.0 Linuksa można znaleźć w
syscalls(2).
Wywoływanie bezpośrednie
W większości przypadków nie jest konieczne wywoływanie wywołań
systemowych bezpośrednio, ale czasem zdarza się, że jakieś przydatna
funkcja systemowa nie jest zaimplementowana w standardowej bibliotece
C.
Składnia
#include <linux/unistd.h>
Makro _syscall
żądane wywołanie systemowe
Konfiguracja
Ważną rzeczą, którą należy wiedzieć o wywołaniu systemowym jest jego
prototyp. Trzeba wiedzieć ile posiada ono argumentów, jakie są ich
typy i jaki typ zwraca. Istnieje sześć makrodefinicji ułatwiających
bezpośrednie wywołania systemu. Ich składnia jest następująca:
_syscallX(type,name,type1,arg1,type2,arg2,...)
gdzie X jest z zakresu 0-5 i oznacza liczbę argumentów
wymaganych przez wywołanie systemowe
type jest zwracanym typem
name jest nazwą wywołania systemowego
typeN jest typem N-tego argumentu
argN jest nazwą N-tego argumentu
Te makrodefinicje tworzą funkcję o nazwie name z podanymi argumentami.
Po zawarciu _syscall() w pliku źródłowym, można wywoływać wywołanie
systemowe poprzez name.
PRZYKŁAD
#include <stdio.h>
#include <linux/unistd.h> /* dla makra _syscallX */
#include <linux/kernel.h> /* dla struktury sysinfo*/
_syscall1(int, sysinfo, struct sysinfo *, info);
/* Uwaga: jeśli kopiowanie odbywa się bezpośrednio ze źródła nroff,
należy pamiętać, aby usunąć dodatkowe znaki `' z printf */
int main(void)
{
struct sysinfo s_info;
int error;
error = sysinfo(&s_info);
printf("code error = %d\n", error);
printf("Uptime = %ds\nLoad: 1 min %d / 5 min %d / 15 min %d\n"
"RAM: total %d / free %d / shared %d\n"
"Memory in buffers = %d\nSwap: total %d / free %d\n"
"Number of processes = %d\n",
s_info.uptime, s_info.loads[0],
s_info.loads[1], s_info.loads[2],
s_info.totalram, s_info.freeram,
s_info.sharedram, s_info.bufferram,
s_info.totalswap, s_info.freeswap,
s_info.procs);
return(0);
}
Przykładowe wyjście
code error = 0
uptime = 502034s
Load: 1 min 13376 / 5 min 5504 / 15 min 1152
RAM: total 15343616 / free 827392 / shared 8237056
Memory in buffers = 5066752
Swap: total 27881472 / free 24698880
Number of processes = 40
UWAGI
Makra _syscall() NIE tworzą prototypu. Może istnieć potrzega stworzenia
go samodzielnie, szczególnie w przypadku korzystania z C++.
Wywołania systemowe nie muszą koniecznie zwracać jedynie dodatnich lub
ujemnych kodów błędu. Trzeba przeczytać źródło, aby upewnić się, jak
zwracają one błędy. Zazwyczaj jest to standardowy kod błędu ze znakiem
ujemnym, np. -EPERM. Makra _syscall() zwracają wynik r wywołania
systemowego jeśli r jest nieujemne, ale zwracają -1 i zmieniają wartość
errno na -r jeśli r jest ujemne. Kody błędów można znaleźć w errno(3).
Niektóre wywołania systemowe, takie jak mmap, wymagają więcej niż
pięciu argumentów. Jest to osiągane poprzez umieszczanie argumentów na
stosie i przekazywanie wskaźnika do bloku argumentów.
Podczas definiowania wywołania systemowego, typy argumentów MUSZĄ
zostać przekazane przez wartość lub przez wskaźnik (dla aregatów takich
jak struktury).
ZGODNE Z
W tym rozdziale występują odwołania do różnych wersji Uniksa i
standardów realizowane poprzez skróty. Są to:
SVr4 System V Release 4 Unix, opisane w "Programmer's Reference
Manual: Operating System API (Intel processors)" (Prentice-Hall
1992, ISBN 0-13-951294-2)
SVID System V Interface Definition, opisane w "The System V Interface
Definition, Fourth Edition".
POSIX.1
IEEE 1003.1-1990 part 1, aka ISO/IEC 9945-1:1990s, inaczej "IEEE
Portable Operating System Interface for Computing Environments",
wyjaśnione w "POSIX Programmer's Guide" Donalda Lewine'a
(O'Reilly & Associates, Inc., 1991, ISBN 0-937175-73-0.
POSIX.1b
IEEE Std 1003.1b-1993 (POSIX.1b standard) opisujący mechanizmy
czasu rzeczywistego w przenośnych systemach operacyjnych,
inaczej ISO/IEC 9945-1:1996, wyjaśnione w "Programming for the
real world - POSIX.4" autorstwa Billa O. Gallmeistera (O'Reilly
& Associates, Inc. ISBN 1-56592-074-0).
SUS, SUSv2
Single Unix Specification. (Rozwijane przez X/Open i The Open
Group. Zobacz także http://www.UNIX-systems.org/version2/ .)
4.3BSD/4.4BSD
Dystrybucje 4.3 i 4.4 systemu Berkeley Unix. 4.4BSD jest zgodny
w górę w stosunku do 4.3.
V7 Version 7, potomek systemów Unix z Bell Labs.
PLIKI
/usr/include/linux/unistd.h
ZOBACZ TAKŻE
errno(3)
AUTORZY
Nazwiska autorów i warunki kopiowania znajdziesz w nagłówku strony man.
Mogą być one odmienne w zależności od strony.
W tłumaczeniu stron podręcznika man z pakietu man-pages, należących do
sekcji 2, w ramach Projektu Tłumaczenia Manuali <http://ptm.linux.pl>
brali udział (kolejność alfabetyczna):
Przemek Borys <pborys@dione.ids.pl>
Adam Byrtek <alpha@irc.pl>
Andrzej Krzysztofowicz <ankry@mif.pg.gda.pl>
Rafał Lewczuk <R.Lewczuk@elka.pw.edu.pl>
Robert Luberda <robert@debian.org>