intro

Autres langues

Langue: pl

Autres versions - même langue

Version: 1996-05-22 (openSuse - 09/10/07)

Section: 2 (Appels système)

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>