INTRO(2)

NAZWA
intro - wprowadzenie do wywołań systemowych

OPIS
Uwaga! To tłumaczenie może być nieaktualne!

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>

INFORMACJE O TŁUMACZENIU
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne. W razie zauważenia różnic między powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:

    man --locale=C 2 intro

Prosimy o pomoc w aktualizacji stron man - więcej informacji można znaleźć pod adresem http://sourceforge.net/projects/manpages-pl/.