Dodatkowe typy danych, wartości stałych systemowych

Należy przyjąć, że "int", "long", "PID", "clock_t", "time_t", "u(int)32" są typu DWORD, zaś "short" jest typu WORD.


Struktura "pt_regs" (funkcja 2) z /usr/include/asm/ptrace.h:

	struct pt_regs {
		long ebx;
		long ecx;
		long edx;
		long esi;
		long edi;
		long ebp;
		long eax;
		int  xds;
		int  xes;
		long orig_eax;
		long eip;
		int  xcs;
		long eflags;
		long esp;
		int  xss;
	};


Bity dostępu (funkcje 5 i 277) z /usr/include/asm/fcntl.h
nazwa ósemkowo komentarz
O_ACCMODE
3
Pełne prawa dostępu
O_RDONLY
0
Otwieranie tylko do odczytu. Dostępne dla sys_mq_open.
O_WRONLY
1
Otwieranie tylko do zapisu. Dostępne dla sys_mq_open.
O_RDWR
2
Otwieranie do odczytu i zapisu. Dostępne dla sys_mq_open.
O_CREAT
100
Utworzenie pliku. Dostępne dla sys_mq_open.
O_EXCL
200
Nie twórz pliku, jeśli już istnieje. Dostępne dla sys_mq_open.
O_NOCTTY
400
Jeśli podana nazwa pliku to terminal, to NIE zostanie on terminalem kontrolnym procesu.
O_TRUNC
1000
Obcięcie pliku
O_APPEND
2000
Dopisywanie do pliku
O_NONBLOCK
4000
Nie otwieraj, jeśli spowoduje to blokadę. Dostępne dla sys_mq_open.
O_NDELAY
O_NONBLOCK
jak wyżej
O_SYNC
10000
specyficzne dla ext2 i urządzeń blokowych
FASYNC
20000
fcntl, dla zgodności z BSD
O_DIRECT
40000
podpowiedź bezpośredniego dostępu do dysku, obecnie ignorowana
O_LARGEFILE
100000
Pozwól na otwieranie plików >4GB
O_DIRECTORY
200000
musi być katalogiem
O_NOFOLLOW
400000
nie podążaj za linkami



Prawa dostępu / tryb (funkcje 5, 8, 14, 15 i 277) z /usr/include/linux/stat.h
nazwa ósemkowo komentarz
S_ISUID
4000
ustaw ID użytkownika przy wykonywaniu (suid)
S_ISGID
2000
ustaw ID grupy przy wykonywaniu (sgid)
S_ISVTX
1000
"sticky bit" - usuwać z takiego katalogu może tylko właściciel
S_IRUSR
400
czytanie przez właściciela (S_IREAD)
S_IWUSR
200
zapis przez właściciela (S_IWRITE)
S_IXUSR
100
wykonywanie/przeszukiwanie katalogu przez właściciela (S_IEXEC)
S_IRGRP
40
czytanie przez grupę
S_IWGRP
20
zapis przez grupę
S_IXGRP
10
wykonywanie/przeszukiwanie katalogu przez grupę
S_IROTH
4
czytanie przez innych (R_OK)
S_IWOTH
2
zapis przez innych (W_OK)
S_IWOTH
1
wykonywanie/przeszukiwanie katalogu przez innych (X_OK)
S_IRWXUGO
(S_IRWXU | S_IRWXG | S_IRWXO)
czytanie, pisanie i wykonywanie przez wszystkich
S_IALLUGO
(S_ISUID | S_ISGID | S_ISVTX | S_IRWXUGO)
czytanie, pisanie i wykonywanie przez wszystkich + suid + sgid + sticky bit
S_IRUGO
(S_IRUSR | S_IRGRP | S_IROTH)
czytanie dla wszystkich
S_IWUGO
(S_IWUSR | S_IWGRP | S_IWOTH)
zapis dla wszystkich
S_IXUGO
(S_IXUSR | S_IXGRP | S_IXOTH)
wykonywanie/przeszukiwanie katalogu dla wszystkich



Flagi montowania (funkcja 21) z /usr/include/linux/fs.h
nazwa wartość komentarz
MS_MGC_MSK
0xC0ED
in m.s. 16-bit; 'magic', niezbędne przed 2.4.0-t9 (????)
MS_RDONLY
1
Zamontuj tylko do odczytu
MS_NOSUID
2
Ignoruj bity suid i sgid
MS_NODEV
4
Zabroń dostępu do specjalnych plików/urządzeń
MS_NOEXEC
8
Zabroń wykonywania programów
MS_SYNCHRONOUS
16
Zapisy są synchronizowane natychmiast
MS_REMOUNT
32
Zmień flagi zamontowanego systemu plików (przemontuj z innymi atrybutami)
MS_MANDLOCK
64
Pozwól na nakazane blokady na systemie plików (???)
MS_NOATIME
1024
Nie zmieniaj czasów dostępu
MS_NODIRATIME
2048
Nie zmieniaj czasów dostępu do katalogów
MS_BIND
4096
Montowanie bindowane - widoczne w innym miejscu systemu plików
MS_REC
16384
 
MS_VERBOSE
32768
 
MS_ACTIVE
(1<<30)
 
MS_NOUSER
(1<<31)
 



Przechodzenie do innego miejsca w pliku (funkcja 19 i 140) z /usr/include/fcntl.h
nazwa wartość znaczenie
SEEK_SET
0
Przesuwanie zaczyna się od początku pliku
SEEK_CUR
1
Przesuwanie zaczyna się od bieżącej pozycji
SEEK_END
2
Przesuwanie zaczyna się od końca pliku


Tak zwana specyfikacja procesu (funkcja 7 i 37)
PID dany sygnał zostanie wysłany do
> 0
procesu potomnego o tym PID
0
każdego procesu potomnego w grupie procesów wywołującego
-1
wszystkich procesów potomnych z wyjątkiem pierwszego
< -1
wszystkich procesów potomnych w grupie |{gid}|


Żądane działanie (funkcja 26) z /usr/include/linux/ptrace.h
PTRACE_... wartość argumenty zwraca
PEEKTEXT
0
PID, adres, wskaźnik na dane
czytaj (d)word pod podanym adresem
PEEKDATA
1
PID, adres, wskaźnik na dane
czytaj (d)word pod podanym adresem w obszarze pamięci Użytkownika
PEEKUSR
2
PID, adres, wskaźnik na dane
czytaj (d)word pod podanym adresem w obszarze pamięci Użytkownika
POKETEXT
3
PID, adres, wskaźnik na dane
zapisz (d)word pod podanym adresem
POKEDATA
4
PID, adres, wskaźnik na dane
zapisz (d)word pod podanym adresem
POKEUSR
5
PID, adres, wskaźnik na dane
zapisz (d)word pod podanym adresem w obszarze pamięci Użytkownika
TRACEME
6
-
Ustaw bit PTRACE we flagach procesu
CONT
7
PID, - , numer sygnału
Uruchom ponownie po sygnale
KILL
8
PID
wyślij sygnał SIGKILL do procesu potomnego, kończąc go
SINGLESTEP 9
PID
Ustaw flagę TRAP, sygnał SIGTRAP
GETREGS
12
PID, -, wskaźnik na dane
pobierz wartości rejestrów procesu potomnego
SETREGS
13
PID, -, wskaźnik na dane
ustaw wartości rejestrów procesu potomnego
GETFPREGS
14
PID, -, wskaźnik na dane
pobierz stan FPU procesu potomnego
SETFPREGS
15
PID, -, wskaźnik na dane
ustal stan FPU procesu potomnego
ATTACH
16
PID, -, -
przyłącz proces do już uruchomionego procesu.
DETACH
17
PID, -, -
odłącz wcześniej przyłączony proces
(K4)GETFPXREGS
18
PID, -, wskaźnik na dane
pobierz rozszerzony stan FPU procesu potomnego
(K4)SETFPXREGS
19
PID, -, wskaźnik na dane
ustal rozszerzony stan FPU procesu potomnego
(K4)SETOPTIONS
21
PID, -, dane
Opcja PTRACE_O_TRACESYSGOOD lub żadna
SYSCALL
24
PID, -, numer sygnału
Kontynuuj i zatrzymaj się na następnym powrocie z danego sygnału

Rejestry są ustawione tak:
EBX, ECX, EDX, ESI, EDI, EBP, EAX, DS, ES, FS, GS, ORIG_EAX, EIP, CS, EFL, UESP, SS, FRAME_SIZE.


Wartości błędów zwracanych przez funkcje systemowe Linuksa. Te numery można znaleźć także w:

"Prawdziwe" zwracane wartości błędów są przeciwnego znaku (na przykład EIO = -5).

%define	EPERM		 1	; Operacja niedozwolona
%define	ENOENT		 2	; Nie ma takiego pliku/katalogu
%define	ESRCH		 3	; Nie ma takiego procesu
%define	EINTR		 4	; Przerwana funkcja systemowa
%define	EIO		 5	; Błąd I/O
%define	ENXIO		 6	; Nie ma takiego urządzenia/adresu
%define	E2BIG		 7	; Za długa lista argumentów
%define	ENOEXEC		 8	; Błąd formatu wykonywalnego
%define	EBADF		 9	; Zły numer pliku
%define	ECHILD		10	; Nie ma procesów potomnych
%define	EAGAIN		11	; Zasoby chwilowo niedostępne.
%define	ENOMEM		12	; Brak pamięci
%define	EACCES		13	; Odmowa dostępu
%define	EFAULT		14	; Zły adres
%define	ENOTBLK		15	; Wymagane jest urządzenie blokowe
%define	EBUSY		16	; Urządzenie/zasób zajęty
%define	EEXIST		17	; Plik istnieje
%define	EXDEV		18	; Dowiązanie międzyurządzeniowe
%define	ENODEV		19	; Nie ma takiego urządzenia
%define	ENOTDIR		20	; To nie jest katalog
%define	EISDIR		21	; To jest katalog
%define	EINVAL		22	; Nieprawidłowy argument
%define	ENFILE		23	; Przepełnienie tablicy plików
%define	EMFILE		24	; Za dużo otwartych plików
%define	ENOTTY		25	; Nieodpowiednia operacja kontroli
				; wejścia/wyjścia (Not a typewriter)
%define	ETXTBSY		26	; Plik tekstowy zajęty
%define	EFBIG		27	; Plik za duży
%define	ENOSPC		28	; Brak miejsca na urządzeniu
%define	ESPIPE		29	; Nieprawidłowa zmiana pozycji w pliku
%define	EROFS		30	; System plików tylko do odczytu
%define	EMLINK		31	; Za dużo linków
%define	EPIPE		32	; Zły potok
%define	EDOM		33	; Argument poza dziedziną funkcji matemat.
%define	ERANGE		34	; Wyniku nie da się przedstawić
%define	EDEADLK		35	; Uniknięto zakleszczenia zasobów
				; (Resource deadlock would occur)
%define	ENAMETOOLONG	36	; Zbyt długa nazwa pliku
%define	ENOLCK		37	; Brak dostępnych blokad
%define	ENOSYS		38	; Funkcja nie zaimplementowana
%define	ENOTEMPTY	39	; Katalog nie jest pusty
%define	ELOOP		40	; Zbyt dużo linków symbolicznych
%define	EWOULDBLOCK	EAGAIN	; Zasoby chwilowo niedostępne (operacja
				;   zablokowałaby program)
%define	ENOMSG		42	; Nie ma wiadomości żądanego typu
%define	EIDRM		43	; Identyfikator usunięty
%define	ECHRNG		44	; Numer kanału spoza zasięgu
%define	EL2NSYNC	45	; Poziom 2 nie zsynchronizowany
%define	EL3HLT		46	; Poziom 3 zatrzymany
%define	EL3RST		47	; Poziom 3 ponownie uruchomiony
%define	ELNRNG		48	; Za duża liczba linków/numer linku
%define	EUNATCH		49	; Niepodłączony sterownik protokołu
%define	ENOCSI		50	; Brak wolnych struktur CSI
%define	EL2HLT		51	; Poziom 2 zatrzymany
%define	EBADE		52	; Nieprawidłowa wymiana
%define	EBADR		53	; Nieprawidłowy deskryptor żądania
%define	EXFULL		54	; Wymiana pełna (bufor?)
%define	ENOANO		55	; No anode
%define	EBADRQC		56	; Nieprawidłowy kod zadania
%define	EBADSLT		57	; Invalid slot

%define	EDEADLOCK	EDEADLK

%define	EBFONT		59	; Nieprawidłowy format pliku czcionki
%define	ENOSTR		60	; Urządzenie nie jest strumieniem
%define	ENODATA		61	; Nie ma danych
%define	ETIME		62	; Przekroczony limit czasu
%define	ENOSR		63	; Brak zasobów strumieniowych
%define	ENONET		64	; Komputer nie jest w sieci
%define	ENOPKG		65	; Pakiet nie zainstalowany
%define	EREMOTE		66	; Obiekt jest zdalny
%define	ENOLINK		67	; Link has been severed
%define	EADV		68	; Advertise error
%define	ESRMNT		69	; Srmount error
%define	ECOMM		70	; Błąd komunikacji przy wysyłaniu
%define	EPROTO		71	; Błąd protokołu
%define	EMULTIHOP	72	; Multihop attempted
%define	EDOTDOT		73	; Błąd specyficzny dla RFS
%define	EBADMSG		74	; To nie jest wiadomość z danymi
%define	EOVERFLOW	75	; Wartość za duża dla określonego typu
%define	ENOTUNIQ	76	; Nazwa nie jest unikalna w sieci
%define	EBADFD		77	; Deskryptor pliku w złym stanie
%define	EREMCHG		78	; Zmiana adresu zdalnego
%define	ELIBACC		79	; Nie można się dostać do wymaganej bibl.
%define	ELIBBAD		80	; Dostęp do zepsutej
				;     biblioteki współdzielonej
%define	ELIBSCN		81	; Zepsuta sekcja .lib w a.out
%define	ELIBMAX		82	; Próba podłączenia zbyt wielu bibliotek
				;     współdzielonych
%define	ELIBEXEC	83	; Nie można bezpośrednio uruchamiać
				;     biblioteki współdzielonej
%define	EILSEQ		84	; Nieprawidłowa sekwencja bajtów
%define	ERESTART	85	; Przerwana funkcja systemowa powinna zostać
				;     uruchomiona ponownie
%define	ESTRPIPE	86	; Streams pipe error
%define	EUSERS		87	; Za dużo użytkowników
%define	ENOTSOCK	88	; Operacja gniazdowa na nie-gnieździe
%define	EDESTADDRREQ	89	; Wymagany adres docelowy
%define	EMSGSIZE	90	; Wiadomość za długa
%define	EPROTOTYPE	91	; Zły typ protokołu dla gniazda
%define	ENOPROTOOPT	92	; Protokół niedostępny
%define	EPROTONOSUPPORT	93	; Protokół nieobsługiwany
%define	ESOCKTNOSUPPORT	94	; Typ gniazda nieobsługiwany
%define	EOPNOTSUPP	95	; Operacja nie obsługiwana po drugiej
				;     stronie transportu
%define	EPFNOSUPPORT	96	; Nieobsługiwana rodzina protokołów
%define	EAFNOSUPPORT	97	; Rodzina adresów nie obsługiwana przez
				;     ten protokół
%define	EADDRINUSE	98	; Adres już jest używany
%define	EADDRNOTAVAIL	99	; Nie można przydzielić żądanego adresu
%define	ENETDOWN	100	; Sieć nie działa
%define	ENETUNREACH	101	; Sieć jest niedostępna
%define	ENETRESET	102	; Brak sieci z powodu resetu
%define	ECONNABORTED	103	; Przerwanie połączenia przez program
%define	ECONNRESET	104	; Reset połączenia przez drugą stronę
%define	ENOBUFS		105	; Brak miejsca w buforze
%define	EISCONN		106	; Druga strona transportu już jest
				;     podłączona
%define	ENOTCONN	107	; Druga strona transportu nie jest
				;     podłączona
%define	ESHUTDOWN	108	; Nie można wysyłać po wyłączeniu z drugiej
				;     strony transportu
%define	ETOOMANYREFS	109	; Too many references: cannot splice
%define	ETIMEDOUT	110	; Przekroczony limit czasu połączenia
%define	ECONNREFUSED	111	; Odmowa połączenia
%define	EHOSTDOWN	112	; Host jest wyłączony
%define	EHOSTUNREACH	113	; Nie ma drogi do hosta
%define	EALREADY	114	; Operacja już trwa
%define	EINPROGRESS	115	; Operacja trwa teraz
%define	ESTALE		116	; Stale NFS file handle
%define	EUCLEAN		117	; Struktura wymaga porządkowania
%define	ENOTNAM		118	; Not a XENIX named type file
%define	ENAVAIL		119	; No XENIX semaphores available
%define	EISNAM		120	; Is a named type file
%define	EREMOTEIO	121	; Błąd zdalnego I/O
%define	EDQUOT		122	; Przekroczony limit dyskowy (Quota)

%define	ENOMEDIUM	123	; Brak nośnika
%define	EMEDIUMTYPE	124	; Zły typ nośnika
%define	ECANCELED	125	; Zrezygnowano z operacji
%define	ENOKEY		126	; Wymagany klucz niedostępny
%define	EKEYEXPIRED	127	; Klucz przedawniony
%define	EKEYREVOKED	128	; Klucz nieważny
%define	EKEYREJECTED	129	; Klucz odrzucony

%define	EOWNERDEAD	130	; Właściciel zginął
%define	ENOTRECOVERABLE	131	; State not recoverable


%define ERESTARTSYS	512
%define ERESTARTNOINTR	513
%define ERESTARTNOHAND	514	; restart if no handler..
%define ENOIOCTLCMD	515	; No ioctl command
%define ERESTART_RESTARTBLOCK 516 ; restart by calling sys_restart_syscall

; NFS v3
%define EBADHANDLE	521	; Illegal NFS file handle
%define ENOTSYNC	522	; Update synchronization mismatch
%define EBADCOOKIE	523	; Cookie is stale
%define ENOTSUPP	524	; Operacja nieobsługiwana
%define ETOOSMALL	525	; Bufor lub żądanie za małe
%define ESERVERFAULT	526	; An untranslatable error occurred
%define EBADTYPE	527	; Typ nieobsługiwany przez serwer
%define EJUKEBOX	528	; Request initiated, but will not
				;     complete before timeout
%define EIOCBQUEUED	529	; iocb queued, will get completion event
%define EIOCBRETRY	530	; iocb queued, will trigger a retry

#define EWOULDBLOCKIO	530	; Would block due to block-IO


Struktura "tms" (funkcja 43) z /usr/include/linux/times.h:

	struct tms {
	    	clock_t tms_utime;
		clock_t tms_stime;
		clock_t tms_cutime;
	    	clock_t tms_cstime;
	    };

Struktura "flock" z /usr/include/asm/fcntl.h:

	struct flock {
		short l_type;	// rodzaj blokady pliku (WORD)

		short l_whence;	// patrz SEEK_* powyżej? (WORD)

		off_t l_start;	// adres miejsca, do którego odnosi
				// się blokada, w bajtach liczonych
				// od pozycji określonej
				// przez l_whence (DWORD)

		off_t l_len;	// długość zablokowanego obszaru.
				// Zero oznacza do końca pliku (DWORD)

		pid_t l_pid;	// otrzymane komendą F_GETLK,
				// ignorowane przy włączaniu blokady (DWORD)
	};


Argumenty funkcji sys_fcntl (numer 55) z /usr/include/bits/fcntl.h
ECX (komenda) Wartość Opis
F_DUPFD
0
EDX staje się kopią deskryptora z EBX
F_GETFD
1
Odczytaj flagę close-on-exec. Gdy bit0=0, plik zostanie otwarty pomimo exec, inaczej plik zostanie zamknięty.
F_SETFD
2
Ustaw flagę close-on-exec na wartość ostatniego bitu w EDX
F_GETFL
3
Zwróć takie flagi deskryptora, jakie były ustawione przez funkcję open
F_SETFL
4
Ustaw flagi deskryptora na wartość EDX. Można ustawić tylko O_APPEND i O_NONBLOCK.
F_GETLK
5
[Jeśli uruchamiasz sys_fcntl64, użyj wersji 64-bitowej]
EDX ma adres struktury flock. Zwróć strukturę flock, która chroni nas przed uzyskaniem blokady lub ustaw pole l_type blokady na F_UNLCK jeśli możliwe
F_SETLK
6
[Jeśli uruchamiasz sys_fcntl64, użyj wersji 64-bitowej]
EDX ma adres struktury flock. Blokada jest ustawiana jeśli l_type jest F_RDLCK lub F_WRLCK albo usuwana, gdy jest F_UNLCK. Jeśli blokada jest przechowywana przez kogoś innego, zwraca -1 i EACCES lub EAGAIN.
F_SETLKW
7
[Jeśli uruchamiasz sys_fcntl64, użyj wersji 64-bitowej]
Podobnie jak F_SETLK, ale zamiast zwracać błąd, czeka na zwolnienie blokady.
F_SETOWN
8
Ustaw proces, będący właścicielem gniazda (socket). Tutaj i w poniższej funkcji grupy procesów zwracane są jako wartości ujemne.
F_GETOWN
9
Pobierz ID procesu, będącego właścicielem gniazda.
F_SETSIG
10
Ustaw numer sygnału, który ma zostać wysłany.
F_GETSIG
11
Pobierz numer sygnału, który ma zostać wysłany.
F_GETLK64
12
EDX ma adres struktury flock. Zwróć strukturę flock, która chroni nas przed uzyskaniem blokady lub ustaw pole l_type locka na F_UNLCK jeśli możliwe
F_SETLK64
13
EDX ma adres struktury flock. Blokada jest ustawiana jeśli l_type jest F_RDLCK lub F_WRLCK albo usuwana, gdy jest F_UNLCK. Jeśli blokada jest przechowywana przez kogoś innego, zwraca -1 i EACCES lub EAGAIN.
F_SETLKW64
14
Podobnie jak F_SETLK, ale zamiast zwracać błąd, czeka na zwolnienie blokady.
F_SETLEASE
1024
Ustaw dzierżawę.
F_GETLEASE
1025
Pobierz informację, jaka dzierżawa jest aktywna.
F_NOTIFY
1026
Żądaj powiadomień na danym katalogu.


Struktura sigaction (funkcja 67) z /usr/include/asm/signal.h:

	struct sigaction {
	    	__sighandler_t sa_handler;	//procedura obsługi sygnału
	    	unsigned long sa_flags;
	    	void (*sa_restorer)(void);	// procedura przywracająca?
	    	sigset_t sa_mask;		// maska utrzymywana dla
	    					// rozszerzalności
	    };

	typedef void (*__sighandler_t)(int);	// typ procedury
						// obsługi sygnału

	#define _NSIG		64
	#define _NSIG_BPW	32
	#define _NSIG_WORDS	(_NSIG/_NSIG_BPW)

	typedef struct {
	    	unsigned long sig[_NSIG_WORDS];
	    } sigset_t;				// definicja typu tej
	    					// maski powyżej


Struktura rlimit (funkcje 75 i 76) z /usr/include/linux/resource.h:

	struct rlimit {
	    	unsigned long rlim_cur;	// limit "miękki" lub
	    				// RLIM_INFINITY=-1 jeśli brak
	    	unsigned long rlim_max;	// maksymalny limit lub
	    				// RLIM_INFINITY jeśli brak
	    };
Tabela numerów zasobów z /usr/include/bits/resource.h
nazwa wartość co oznacza
RLIMIT_CPU
0
limit czasu procesora w sekundach
RLIMIT_FSIZE
1
rozmiar w bajtach największego pliku możliwego do utworzenia
RLIMIT_DATA
2
maksymalny rozmiar w bajtach wszystkich segmentów danych
RLIMIT_STACK
3
maksymalny rozmiar stosu w bajtach
RLIMIT_CORE
4
maksymalny rozmiar rdzenia (core) w bajtach
RLIMIT_RSS
5
maksymalny rozmiar kodu rezydentnego
RLIMIT_NPROC
6
maksymalna liczba procesów dla danego rzeczywistego PID
RLIMIT_OFILE, RLIMIT_NOFILE
7
maksymalna liczba otwartych deskryptorów + 1
RLIMIT_MEMLOCK
8
maksymalna liczba bajtów pamięci, którą można zablokować (sys_mlock)
RLIMIT_AS
9
limit przestrzeni adresowej
RLIMIT_LOCKS
10
limit blokad plików (sys_flock itp.)
RLIMIT_SIGPENDING
11
maksymalna liczba czekających sygnałów
RLIMIT_MSGQUEUE
12
maksymalna liczba bajtów w kolejkach wiadomości
RLIMIT_NICE
13
maksymalny priorytet sys_nice, jaki można ustawić
RLIMIT_RTPRIO
14
maksymalny priorytet czasu rzeczywistego, jaki można ustawić dla nieuprzywilejowanego procesu


Struktura rusage (funkcja 77) z /usr/include/linux/resource.h:

	    #define	RUSAGE_SELF	0
	    #define	RUSAGE_CHILDREN	(-1)
	    #define	RUSAGE_BOTH	(-2)	// sys_wait4() używa tego

	    struct	rusage {
	    	struct timeval ru_utime; // wykorzystany czas użytkownika
	    	struct timeval ru_stime; // wykorzystany czas systemu
	    	long	ru_maxrss;	// rozmiar maksymalnego
	    				// rezydentnego zbioru?
	    	long	ru_ixrss;	// rozmiar współdzielonej pamięci
	    	long	ru_idrss;	// rozmiar niewspółdzielonej pamięci
	    	long	ru_isrss;	// rozmiar niewspółdzielonego stosu
	    	long	ru_minflt;	// liczba odzyskanych stron pamięci
	    	long	ru_majflt;	// liczba błędów stron pamięci
	    	long	ru_nswap;	// wymiany (swaps)
	    	long	ru_inblock;	// blokujące operacje wejścia
	    	long	ru_oublock;	// blokujące operacje wyjścia
	    	long	ru_msgsnd;	// wysłane wiadomości
	    	long	ru_msgrcv;	// odebrane wiadomości
	    	long	ru_nsignals;	// odebrane sygnały
	    	long	ru_nvcsw;	// dobrowolne zmiany kontekstu
	    	long	ru_nivcsw;	// niedobrowolne zmiany kontekstu
	    };


Struktura timeval (funkcja 78) z /usr/include/linux/time.h:

	struct timeval {
	    	time_t		tv_sec;		// dword, sekundy
	    	suseconds_t	tv_usec;	// dword, mikrosekundy
	    };


Struktura timezone (funkcja 78) z /usr/include/linux/time.h:

	struct timezone {
		int	tz_minuteswest;	// minuty na zachód od Greenwich
		int	tz_dsttime;	// typ poprawki punktu docelowego?
		};


Struktura sigset_t (funkcje 72 i 73) z /usr/include/asm/signal.h:

	#define _NSIG		64
	#define _NSIG_BPW	32
	#define _NSIG_WORDS	(_NSIG/_NSIG_BPW)

	typedef struct {
	    	unsigned long sig[_NSIG_WORDS];
	    } sigset_t;



Komendy dla funkcji sys_ulimit (numer 58) z /usr/include/ulimit.h
nazwa wartość komenda
UL_GETFSIZE
1
pobierz limit rozmiaru pliku, w 512-bajtowych jednostkach
UL_SETFSIZE
2
ustaw limit rozmiaru pliku, w 512-bajtowych jednostkach
__UL_GETMAXBRK
3
(podobno nie w Linuksie) podaj najwyższy możliwy adres w segmencie danych
__UL_GETOPENMAX
4
podaj największą liczbę plików, którą ten proces może otworzyć


Typ urządzenia dla funkcji sys_mknod (numer 14) z /usr/include/linux/stat.h
nazwa ósemkowo typ urządzenia
S_IFREG
0100000
normalny plik
S_IFCHR
0020000
urządzenie znakowe
S_IFBLK
0060000
urządzenie blokowe
S_IFIFO
0010000
nazwany potok (named pipe)


Struktura "utimbuf" (funkcja 30) z /usr/include/linux/utime.h:

              struct utimbuf {
                      time_t actime;  /* czas dostępu */
                      time_t modtime; /* czas ostatniej zmiany */
              };


Struktura "timeb" (funkcja 35) z /usr/include/sys/timeb.h:

	struct timeb {
		time_t   time;		/*liczba sekund od początku epoki*/
		unsigned short millitm;	/* liczba milisekund od chwili
					   time sekund */
		short    timezone;	/* przesuniecie czasu dla strefy
					   lokalnej w minutach na zachód
					    od Greenwich */
		short    dstflag;	/* różne od zera oznacza, że w
					   danej części roku obowiązuje
					   czas letni */
                 };


Struktura "ustat" (funkcja 62) z /usr/include/bits/ustat.h:

	struct ustat {
		__daddr_t f_tfree; /* całkowita liczba wolnych bloków */
		__ino_t f_tinode;  /* liczba wolnych węzłów i-node */
		char f_fname[6];   /* nazwa systemu plików (nieużywane) */
		char f_fpack[6];   /* nazwa paczki(?) systemu plików
					 (nieużywane) */
		  };


Flagi dla funkcji swapon (numer 87) z /usr/include/sys/swap.h:

/* Priorytet przestrzeni wymiany swap jest kodowany tak:
   (prio << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK
*/
#define SWAP_FLAG_PREFER        0x8000  /* Ustawiony, jeśli jest określony
					   priorytet. Ustawienie tego bitu
					   powoduje to, że nowa przestrzeń
					   wymiany będzie miała wyższy
					   priorytet */
#define SWAP_FLAG_PRIO_MASK     0x7fff
#define SWAP_FLAG_PRIO_SHIFT    0



Flagi dla funkcji reboot (numer 88) z /usr/include/linux/reboot.h
nazwa wartość co oznacza
LINUX_REBOOT_CMD_RESTART
0x01234567
reset systemu
LINUX_REBOOT_CMD_HALT
0xCDEF0123
zatrzymanie systemu
LINUX_REBOOT_CMD_CAD_ON
0x89ABCDEF
włączenie obsługi Ctrl-Alt-Del
LINUX_REBOOT_CMD_CAD_OFF
0x00000000
wyłączenie obsługi Ctrl-Alt-Del
LINUX_REBOOT_CMD_POWER_OFF
0x4321FEDC
wyłączenie zasilania
LINUX_REBOOT_CMD_RESTART2
0xA1B2C3D4
reset z użyciem komendy podanej jako dodatkowy argument


Struktura "dirent" (funkcja 89 i 141) z /usr/include/linux/dirent.h:

	struct dirent {
		long d_ino;                 /* numer i-węzła */
		off_t d_off;                /* offset od początku katalogu
					do następnej struktury dirent
					(do bieżącego dirent?) */
		unsigned short d_reclen;    /* długość tego dirent
						 (d_name?) */
		char d_name [NAME_MAX+1];   /* nazwa pliku (zakończona
						 znakiem zerowym) */
              };



Rodzaje ochrony mapowanych danych (funkcja 90) z /usr/include/bits/mman.h
nazwa wartość co oznacza
PROT_READ
1
strona pamięci może być czytana
PROT_WRITE
2
strona może być zapisywana
PROT_EXEC
4
strona może być wykonywana
PROT_NONE
0
nie ma dostępu do strony
Można użyć OR, by połączyć więcej flag.



Flagi mapowania danych (funkcja 90) z /usr/include/bits/mman.h
nazwa wartość co oznacza
MAP_FIXED
0x10
Koniecznie użyj adresu podanego jako parametr
MAP_GROWSDOWN
0x0100
Segment typu stosowego ("rośnie" w dół)
MAP_DENYWRITE
0x0800
Ignorowane
MAP_EXECUTABLE
0x1000
Wykonywalny (ignorowane)
MAP_LOCKED
0x2000
Zablokuj mapowanie. Ignorowane.
MAP_NORESERVE
0x4000
Nie rezerwuj stron wymiany swap dla tego mapowania.
MAP_POPULATE
0x8000
Rozmnóż tablice stron?
MAP_NONBLOCK
0x10000
Nie blokuj w czasie we/wy.
MAP_FILE
0
użyj pliku? Ignorowane.
MAP_ANONYMOUS, MAP_ANON
0x20
Nie używaj pliku. Ignorowane są deskryptor pliku i parametr offset. Zaimplementowany od 2.4

Wybrać tylko 1 spośród tych:
Rodzaje współdzielenia
nazwa wartość co oznacza
MAP_SHARED
0x01
współdzielenie zmian
MAP_PRIVATE
0x02
zmiany są prywatne




Parametry funkcji 96 i 97 (z /usr/include/bits/resource.h)
EBX = czyj priorytet pobieramy/zmieniamy wartość w EBX co oznacza
PRIO_PROCESS
0
ECX to ID procesu
PRIO_PGRP
1
ECX to ID grupy procesów
PRIO_USER
2
ECX to ID użytkownika


Struktura "statfs" (funkcja 99) z /usr/include/asm/statfs.h:

	struct statfs {
		long    f_type;     /* typ systemu plików (patrz niżej) */
		long    f_bsize;    /* optymalny rozmiar bloku transferu */
		long    f_blocks;   /* całkowita liczba bloków danych */
		long    f_bfree;    /* wolne bloki */
		long    f_bavail;   /* wolne bloki dostępne dla
					 nie-superużytkowników */
		long    f_files;    /* całkowita liczba węzłów plików
					 (file nodes) */
		long    f_ffree;    /* wolne węzły */
		fsid_t  f_fsid;     /* ID systemu plików */
		long    f_namelen;  /* maks. długość nazwy pliku */
		long    f_spare[6]; /* zapasowe na później */
              };

		struct
	      {
	        int __val[2];
	      } __fsid_t;		/* typ struktury fsid_t powyżej */


Typ systemu plików
nazwa wartość
AFFS_SUPER_MAGIC
0xADFF
EXT_SUPER_MAGIC
0x137D
EXT2_OLD_SUPER_MAGIC
0xEF51
EXT2_SUPER_MAGIC
0xEF53
HPFS_SUPER_MAGIC
0xF995E849
ISOFS_SUPER_MAGIC
0x9660
MINIX_SUPER_MAGIC
0x137F (oryg. minix)
MINIX_SUPER_MAGIC2
0x138F (30-znakowy minix)
MINIX2_SUPER_MAGIC
0x2468 (minix V2)
MINIX2_SUPER_MAGIC2
0x2478 (minix V2, 30-znakowy)
MSDOS_SUPER_MAGIC
0x4d44
NCP_SUPER_MAGIC
0x564c
NFS_SUPER_MAGIC
0x6969
PROC_SUPER_MAGIC
0x9fa0
SMB_SUPER_MAGIC
0x517B
XENIX_SUPER_MAGIC
0x012FF7B4
SYSV4_SUPER_MAGIC
0x012FF7B5
SYSV2_SUPER_MAGIC
0x012FF7B6
COH_SUPER_MAGIC
0x012FF7B7
UFS_MAGIC
0x00011954
_XIAFS_SUPER_MAGIC
0x012FD16D


Komenda dla funkcji sys_syslog (numer 103) z /usr/src/linux/kernel/printk.c
wartość komentarz
0
Zamknij log. Nic nie robi.
1
Otwórz log. Nic nie robi.
2
Czytaj z logu co najwyżej EDX bajtów do [ECX]. Zwraca w EAX liczbę odczytanych bajtów.
3
Przeczytaj wszystkie (ostatnie EDX bajtów) wiadomości pozostałe w buforze. Zwraca w EAX liczbę odczytanych bajtów.
4
Przeczytaj i wyczyść wszystkie (ostatnie EDX bajtów) wiadomości pozostałe w buforze. Zwraca w EAX liczbę odczytanych bajtów.
5
Wyczyść bufor.
6
Wyłącz funkcję printk() na konsolę.
7
Włącz funkcję printk() na konsolę.
8
Ustal poziom logowania wiadomości wysyłanych na konsolę.


Numer czasomierza (funkcja 104) z /usr/include/linux/time.h
nazwa wartość komentarz
ITIMER_REAL
0
odlicza czas rzeczywisty
ITIMER_VIRTUAL
1
odlicza czas wykonywania się procesu
ITIMER_PROF
2
odlicza oba czasy


Struktura "itimerval" (funkcja 104) z /usr/include/linux/time.h:

	struct itimerval {
                struct timeval it_interval; /* następna wartość? */
                struct timeval it_value;    /* obecna wartość */
            };

	struct timeval {
                long tv_sec;                /* sekundy */
                long tv_usec;               /* mikrosekundy */
            };


Struktura "stat" (funkcja 104) z man 2 stat (i /usr/include/asm/stat.h, gdzie zwykle dane są bardziej adekwatne do posiadanego systemu, niż na stronach manuala):

		/* ze strony manuala: */
              struct stat {
                  dev_t         st_dev;      /* urządzenie */
                  ino_t         st_ino;      /* i-węzeł (inode) */
                  umode_t       st_mode;     /* ochrona */
                  nlink_t       st_nlink;    /* liczba dowiązań stałych
                  				 (hardlinks) */
                  uid_t         st_uid;      /*ID użytkownika właściciela*/
                  gid_t         st_gid;      /* ID grupy właściciela */
                  dev_t         st_rdev;     /* typ urządzenia (jeśli
                  				 urządzenie inode) */
                  off_t         st_size;     /* całkowity rozmiar
                  				w bajtach */
                  unsigned long st_blksize;  /* wielkość bloku dla I/O
                  				 systemu plików */
                  unsigned long st_blocks;   /*liczba zaalokowanych bloków*/
                  time_t        st_atime;    /* czas ostatniego dostępu */
                  time_t        st_mtime;    /*czas ostatniej modyfikacji*/
                  time_t        st_ctime;    /* czas ostatniej zmiany */
              };

		/* z pliku /usr/include/asm/stat.h: */
		struct stat {
			unsigned long  st_dev;
			unsigned long  st_ino;
			unsigned short st_mode;
			unsigned short st_nlink;
			unsigned short st_uid;
			unsigned short st_gid;
			unsigned long  st_rdev;
			unsigned long  st_size;
			unsigned long  st_blksize;
			unsigned long  st_blocks;
			unsigned long  st_atime;
			unsigned long  st_atime_nsec;
			unsigned long  st_mtime;
			unsigned long  st_mtime_nsec;
			unsigned long  st_ctime;
			unsigned long  st_ctime_nsec;
			unsigned long  __unused4;
			unsigned long  __unused5;
		};


Możliwe wartości pola st_mode
nazwa ósemkowo co oznacza
S_IFMT
00170000
maska bitowa dla pól bitowych typu pliku
S_IFSOCK
0140000
gniazdo
S_IFLNK
0120000
dowiązanie symboliczne (symbolic link)
S_IFREG
0100000
plik regularny
S_IFBLK
0060000
urządzenie blokowe
S_IFDIR
0040000
katalog
S_IFCHR
0020000
urządzenie znakowe
S_IFIFO
0010000
fifo
S_ISUID
0004000
bit 'set UID'
S_ISGID
0002000
bit 'set GID'
S_ISVTX
0001000
bit 'sticky'
S_IRWXU
00700
użytkownik (właściciel pliku) ma prawa odczytu, zapisu i wykonania
S_IRUSR (S_IREAD)
00400
użytkownik ma prawa odczytu
S_IWUSR (S_IWRITE)
00200
użytkownik ma prawa zapisu
S_IXUSR (S_IEXEC)
00100
użytkownik ma prawa wykonania
S_IRWXG
0070
grupa ma prawa odczytu, zapisu i wykonania
S_IRGRP (S_IREAD)
0040
grupa ma prawa odczytu
S_IWGRP (S_IWRITE)
0020
grupa ma prawa zapisu
S_IXGRP (S_IEXEC)
0010
użytkownik ma prawa wykonania
S_IRWXO
007
inni mają prawa odczytu, zapisu i wykonania
S_IROTH (S_IREAD)
004
inni mają prawa odczytu
S_IWOTH (S_IWRITE)
002
inni mają prawa zapisu
S_IXOTH (S_IEXEC)
001
inni mają prawa wykonania


Struktura "vm86_struct" (funkcja 113) z /usr/include/asm/vm86.h:

	struct vm86_struct {
	        struct vm86_regs regs;
	        unsigned long flags;
        	unsigned long screen_bitmap;
        	unsigned long cpu_type;
        	struct revectored_struct int_revectored;
        	struct revectored_struct int21_revectored;
	};

	struct vm86_regs {
	/*
 	 * normalne rejestry, ze specjalnym znaczeniem dla
 	 	rej.segmentowych i deskryptorów
 	 */
        	long ebx;
        	long ecx;
        	long edx;
        	long esi;
        	long edi;
        	long ebp;
        	long eax;
        	long __null_ds;
        	long __null_es;
        	long __null_fs;
        	long __null_gs;
        	long orig_eax;
        	long eip;
        	unsigned short cs, __csh;
        	long eflags;
        	long esp;
        	unsigned short ss, __ssh;
	/*
	 * te są specyficzne dla trybu v86:
	 */
        	unsigned short es, __esh;
        	unsigned short ds, __dsh;
        	unsigned short fs, __fsh;
        	unsigned short gs, __gsh;
	};

	struct revectored_struct {
        	unsigned long __map[8];            /* 256 bitów */
	};


Opcje dla funkcji typu "wait" (numer 7 i 114) to wartość 0 lub jedna lub więcej tych opcji (z /usr/include/bits/waitflags.h):

Opcje dla funkcji typu "wait"
nazwa wartość co oznacza
WNOHANG
1
nie blokuj czekania, wraca natychmiast, gdy żaden potomek się nie zakończył. Tylko dla sys_wait/pid
WUNTRACED
2
podaj status zatrzymanych procesów potomnych. Tylko dla sys_wait, sys_waitpid
WCONTINUED
8
czekaj na zatrzymanych potomków, wznowionych sygnałem SIGCONT
WSTOPPED
2
czekaj na potomków zatrzymanych przez sygnał. Tylko dla sys_waitid
WEXITED
4
czekaj na zakończenie potomków. Tylko dla sys_waitid
WNOWAIT
0x01000000
tylko pobierz status. Tylko dla sys_waitid
__WNOTHREAD
0x20000000
nie czekaj na potomków innych wątków grupy. Tylko dla sys_waitid
__WALL
0x40000000
czekaj na któregokolwiek z potomków. Tylko dla sys_waitid
__WCLONE
0x80000000
czekaj na sklonowane procesy. Tylko dla sys_waitid


Struktura sysinfo (funkcja 116) z /usr/include/linux/kernel.h:

	(pre 2.3.16, wszystkie rozmiary w bajtach):

	struct sysinfo {
                   long uptime;             /* liczba sekund od startu
                   				 systemu */
                   unsigned long loads[3];  /* średnie obciążenie w ciągu
                   				 1, 5 i 15 minut */
                   unsigned long totalram;  /* ilość pamięci */
                   unsigned long freeram;   /* ilość wolnej pamięci */
                   unsigned long sharedram; /* ilość pamięci wspólnej */
                   unsigned long bufferram; /* pamięć wykorzystywana
                   				 przez bufory */
                   unsigned long totalswap; /* ilość pamięci wymiany */
                   unsigned long freeswap;  /* ilość wolnej
                   				 pamięci wymiany */
                   unsigned short procs;    /* liczba procesów */
                   char _f[22];             /* dopełnienie do 64 bajtów */
              };

	(od 2.3.48, rozmiary w krotnościach mem_unit?)

	struct sysinfo {
                   long uptime;             /* liczba sekund od startu
                   				 systemu */
                   unsigned long loads[3];  /* średnie obciążenie w ciągu
                   				 1, 5 i 15 minut */
                   unsigned long totalram;  /* ilość pamięci */
                   unsigned long freeram;   /* ilość wolnej pamięci */
                   unsigned long sharedram; /* ilość pamięci wspólnej */
                   unsigned long bufferram; /* pamięć wykorzystywana
                   				przez bufory */
                   unsigned long totalswap; /* ilość pamięci wymiany */
                   unsigned long freeswap;  /* ilość wolnej
                   				 pamięci wymiany */
                   unsigned short procs;    /* liczba procesów */
                   unsigned long totalhigh; /* ilość pamięci wysokiej */
                   unsigned long freehigh;  /* ilość wolnej
                   				 pamięci wysokiej */
                   unsigned int mem_unit;   /* wielkość jednostki pamięci
                   				 w bajtach */
 				/* dopełnienie dla libc5 */
                    char _f[20-2*sizeof(long)-sizeof(int)];
              };


Flagi dla funkcji 120 (dla jądra 2.4.18?) z /usr/include/linux/sched.h:

Flagi klonowania
nazwa wartość co oznacza
CSIGNAL
0x000000ff
maska sygnałów do wysłania przy wychodzeniu
CLONE_VM
0x00000100
gdy VM jest dzielone między procesy
CLONE_FS
0x00000200
gdy informacje o systemie plików jest dzielone między procesy
CLONE_FILES
0x00000400
gdy otwarte pliki są dzielone między procesy
CLONE_SIGHAND
0x00000800
gdy dzielone są procedury obsługi sygnałów i blokowane sygnały
CLONE_PID
0x00001000
gdy PID jest dzielony między procesy
CLONE_PTRACE
0x00002000
jeśli chcemy, aby klon też mógł być śledzony
CLONE_VFORK
0x00004000
jeśli klonujący chce, by proces potomny go obudził przy mm_release
CLONE_PARENT
0x00008000
jeśli klon ma mieć tego samego rodzica, co klonujący
CLONE_THREAD
0x00010000
Ta sama grupa wątków?
CLONE_NEWNS
0x00020000
Nowa grupa przestrzeni nazw??
CLONE_SIGNAL
(CLONE_SIGHAND | CLONE_THREAD)
Połączenie tych dwóch: ta sama grupa wątków oraz gdy dzielone są procedury obsługi sygnałów i blokowane sygnały


Struktura utsname (funkcja 122) z /usr/include/sys/utsname.h:

	#define _UTSNAME_LENGTH 65      /* wszystkie tablice poniżej
						 są tej długości */

	struct utsname  {
    		/* Nazwa implementacji systemu operacyjnego.  */
    		char sysname[_UTSNAME_SYSNAME_LENGTH];

    		/* Nazwa tego komputera w sieci.  */
    		char nodename[_UTSNAME_NODENAME_LENGTH];

    		/* Wydanie (release) tej implementacji.  */
    		char release[_UTSNAME_RELEASE_LENGTH];
    		/* Wersja tego wydania.  */
    		char version[_UTSNAME_VERSION_LENGTH];

    		/* Nazwa sprzętu, na który system pracuje.  */
    		char machine[_UTSNAME_MACHINE_LENGTH];

	#if _UTSNAME_DOMAIN_LENGTH - 0
	    /* Nazwa domeny tego komputera w sieci.  */
	# ifdef __USE_GNU
	    char domainname[_UTSNAME_DOMAIN_LENGTH];
	# else
	    char __domainname[_UTSNAME_DOMAIN_LENGTH];
	# endif
	#endif
	  };


Numery funkcji dla modify_ldt (funkcja 123)

Funkcje zmiany Lokalnej Tablicy Deskryptorów
wartość co oznacza
0
Czytaj LDT do [ECX], EDX bajtów
1
Zmień 1 wpis w LDT. ECX ma adres struktury modify_ldt_ldt_s, a EDX - jej rozmiar
2
Czytaj domyślne LDT do [ECX], EDX bajtów
17
Zmień 1 wpis w LDT. ECX ma adres struktury modify_ldt_ldt_s, a EDX - jej rozmiar (?)

Struktura "modify_ldt_ldt_s" (funkcja 123) z /usr/include/asm/ldt.h:

	struct modify_ldt_ldt_s {
	        unsigned int  entry_number;
	        unsigned long base_addr;
	        unsigned int  limit;
	        unsigned int  seg_32bit:1;
	        unsigned int  contents:2;
	        unsigned int  read_exec_only:1;
	        unsigned int  limit_in_pages:1;
	        unsigned int  seg_not_present:1;
	        unsigned int  useable:1;
	};


Struktura "timex" (funkcja 124) z man 2 adjtimex (w /usr/include/linux/timex.h jest trochę większa):

	struct timex {
		int modes;           /* przełącznik trybu */
		long offset;         /* offset czasu (mikrosekundy) */
		long frequency;      /* offset częstotliwości
					 (skalowany ppm) */
		long maxerror;       /* maksymalny błąd (mikrosekundy) */
		long esterror;       /* obliczony błąd (mikrosekundy) */
		int status;          /* komenda/status zegara */
		long constant;       /* stała czasu pll */
		long precision;      /* dokładność zegara (mikrosekundy)
					 (tylko do odczytu) */
		long tolerance;      /* tolerancja częstotliwości
					 zegara (ppm) (tylko do odczytu) */
		struct timeval time; /* aktualny czas (tylko do odczytu) */
		long tick;           /* czas miedzy tyknięciami
					 zegara (mikrosekundy) */
              };

Pole "modes" określa, które parametry (jeśli w ogóle) ustawić. Może ono zawierać bitowe OR kombinacji zera lub więcej spośród następujących wartości:

Wartości pola "modes"
nazwa wartość opis
ADJ_OFFSET
0x0001
offset czasu
ADJ_FREQUENCY
0x0002
offset częstotliwości
ADJ_MAXERROR
0x0004
maksymalny błąd czasu
ADJ_ESTERROR
0x0008
obliczany błąd czasu
ADJ_STATUS
0x0010
status zegara
ADJ_TIMECONST
0x0020
stała czasu pll
ADJ_TICK
0x4000
wartość tyknięcia
ADJ_OFFSET_SINGLESHOT
0x8001
staromodne adjtime

Zwyczajni użytkownicy są ograniczeni do wartości zero dla "modes". Jedynie superużytkownik może ustawiać jakiekolwiek parametry.

Jeśli nie wystąpił błąd, zwracane jest:

Możliwe wyniki działania i stan zegara
nazwa wartość opis
TIME_OK
0
zegar zsynchronizowany
TIME_INS
1
dodaj sekundę przestępną
TIME_DEL
2
skasuj sekundę przestępną
TIME_OOP
3
sekunda przestępna trwa
TIME_WAIT
4
wystąpiła sekunda przestępna
TIME_BAD
5
błąd, zegar nie zsynchronizowany

Więcej informacji w /usr/include/linux/timex.h.



Akcja do wykonania (funkcja 126) z /usr/include/asm/signal.h:

Możliwe zmiany bieżącego zestawu sygnałów blokowanych
nazwa wartość opis
SIG_BLOCK
0
Do aktualnego zestawu sygnałów blokowanych dodaj te spod [ECX].
SIG_UNBLOCK
1
Od aktualnego zestawu sygnałów blokowanych usuń te spod [ECX].
SIG_SETMASK
2
Aktualny zestaw sygnałów blokowanych zamień na ten spod [ECX].


Struktura "module" (funkcja 128) z man module:

	struct module {
                unsigned long size_of_struct;
                struct module *next;
                const char *name;
                unsigned long size;
                long usecount;
                unsigned long flags;
                unsigned int nsyms;
                unsigned int ndeps;
                struct module_symbol *syms;
                struct module_ref *deps;
                struct module_ref *refs;
                int (*init)(void);
                void (*cleanup)(void);
                const struct exception_table_entry *ex_table_start;
                const struct exception_table_entry *ex_table_end;
              #ifdef __alpha__
                unsigned long gp;
              #endif
              };

Więcej w /usr/include/linux/module.h.



Struktura "kernel_sym" (funkcja 130) z /usr/include/linux/module.h:

	struct kernel_sym {
        	unsigned long value;
        	char name[60];
	};


Komenda do wykonania (funkcja 131) z /usr/include/sys/quota.h (w nawiasach z /usr/include/linux/quota.h):

Opcje limitów dyskowych
nazwa wartość opis
Q_QUOTAON
0x0100 (0x800002)
Włącz limity dyskowe. ESI = adres nazwy pliku zawierającego limity.
Q_QUOTAOFF
0x0200 (0x800003)
Wyłącz limity. EDX i ESI ignorowane.
Q_GETQUOTA
0x0300 (0x800007)
Pobierz limity i bieżące zapełnienie dla użytkownika/grupy EDX. ESI = adres struktury mem_dqblk.
Q_SETQUOTA
0x0400 (0x800008)
Ustaw limity i bieżące zapełnienie dla użytkownika/grupy EDX. ESI = adres struktury mem_dqblk.
Q_SETQLIM
0x0700 (brak)
Ustaw limity dla użytkownika/grupy EDX. ESI = adres struktury mem_dqblk.
Q_SETUSE
0x0500 (brak)
Ustaw bieżące zapełnienie dla użytkownika/grupy EDX. ESI = adres struktury mem_dqblk.
Q_SYNC
0x0600 (0x800001)
Aktualizuj kopię quot dla systemu plików. Jeśli ECX=0, synchronizowane są wszystkie systemy plików z włączoną quotą. EDX i ESI ignorowane.
Q_GETSTATS
0x0800
Pobierz statystyki i ogólne informacje o quocie. ESI = adres struktury dqstats. ECX i EDX ignorowane.
Q_GETINFO
brak (0x800005)
Pobierz informacje o pliku z quotami?. ESI = adres struktury mem_dqinfo. EDX ignorowane.
Q_SETINFO
brak (0x800006)
Ustaw informacje o pliku z quotami?. ESI = adres struktury mem_dqinfo. EDX ignorowane.
Q_SETGRACE
brak (brak)
Ustal "grace times" w pliku z quotami?. ESI = adres struktury mem_dqinfo. EDX ignorowane.
Q_SETFLAGS
brak (brak)
Ustal flagi w informacji o pliku z quotami?. ESI = adres struktury mem_dqinfo. EDX ignorowane.

Na systemie plików XFS komendy są inne.

	struct mem_dqblk {
	        __u32 dqb_bhardlimit;   /* bezwzględny limit zajętych
	        				 bloków na dysku */
	        __u32 dqb_bsoftlimit;   /* preferowany limit zajętych
	        				 bloków na dysku */
	        qsize_t dqb_curspace;   /* bieżący rozmiar zajmowanej
	        				 przestrzeni */
	        __u32 dqb_ihardlimit;   /* bezwzględny limit zajętych
						węzłów (i-nodes) na dysku*/
	        __u32 dqb_isoftlimit;   /* preferowany limit zajętych
	        				 węzłów na dysku */
	        __u32 dqb_curinodes;    /*bieżąca liczba zajętych węzłów*/
	        time_t dqb_btime;       /* limit czasu nadmiernego
	        				użycia dysku */
	        time_t dqb_itime;       /* limit czasu nadmiernego
	        				użycia węzła */
	};

	struct mem_dqinfo {
	        struct quota_format_type *dqi_format;
	        int dqi_flags;
	        unsigned int dqi_bgrace;
	        unsigned int dqi_igrace;
	        union {
                	struct v1_mem_dqinfo v1_i;
                	struct v2_mem_dqinfo v2_i;
        	} u;
	};

	struct dqstats {
	        int lookups;
	        int drops;
	        int reads;
	        int writes;
	        int cache_hits;
	        int allocated_dquots;
	        int free_dquots;
	        int syncs;
	};


Komenda do wykonania (funkcja 134):

Komendy demona bdflush
wartość EBX opis
<= 0
jeśli demon nie był uruchomiony, to funkcja wchodzi w kod demona i nigdy nie powraca.
1
Niektóre bufory są zapisywane na dysk.
>=2 i jest parzyste
ECX = adres DWORDa, pod [ECX] zostaje zwrócony parametr dostrajający równy (EBX-2)/2
>=3 i jest nieparzyste
ECX = DWORD, jądro nadaje tę wartość parametrowi dostrajającemu o numerze (EBX-3)/2


Opcje dla sysfs (funkcja 135):

Operacje na nazwach systemów plików
EBX opis ECX i EDX co zwraca
1
Tłumacz nazwę systemu plików na numer
ECX = adres łańcucha znaków zawierającego nazwę.
EAX = numer systemu plików
2
Tłumacz numer systemu plików na nazwę
ECX = numer systemu plików
EDX = adres bufora na nazwę.
EAX = 0
3
Zwróć ogólną liczbę systemów plików aktualnie obecnych w jądrze.
ignorowane
EAX = liczba systemów plików


Operacja dla sys_flock (funkcja 143) z /usr/include/asm/fcntl.h:

Opcje blokad plików
nazwa wartość opis
LOCK_SH
1
Założenie blokady współdzielonej.
LOCK_EX
2
Założenie blokady wyłącznej.
LOCK_UN
8
Usunięcie blokady założonej przez ten proces
Po zORowaniu z wartością LOCK_NB=4, funkcja nie zablokuje działania programu.

Flagi dla sys_msync (funkcja 144) z /usr/include/asm/mman.h:

Możliwości synchronizacji zapisu pamięci
nazwa wartość opis
MS_ASYNC
1
Wykonaj zapisy asynchroniczne.
MS_INVALIDATE
2
Zaznacz dane jako nieważne po zapisaniu
MS_SYNC
4
Wykonaj zapisy synchroniczne.


Struktura iovec (funkcja 145) z /usr/include/bits/uio.h:

           struct iovec {
                   void *iov_base;	/* adres danych */
                   size_t iov_len;	/* długość danych */
           };


Struktura sysctl_args (funkcja 149) z man 2 sysctl:

       struct __sysctl_args {
               int *name;        /* wektor liczb całkowitych
               				opisujący zmienną */
               int nlen;         /* długość tego wektora */
               void *oldval;     /* 0 lub adres, gdzie zachować
               				 starą wartość */
               size_t *oldlenp;  /* ilość miejsca na starą wartość
                                    nadpisywana przez rzeczywisty
                                    jej rozmiar */
               void *newval;     /* 0 lub adres nowej wartości */
               size_t newlen;    /* rozmiar nowej wartości */
       };


Flagi dla sys_mlockall (funkcja 152) z /usr/include/bits/mman.h:

Blokowanie wszystkich stron pamięci procesu
nazwa wartość opis
MCL_CURRENT
1
Zablokuj wszystkie strony pamięci w przestrzeni adresowej procesu.
MCL_FUTURE
2
Zablokuj wszystkie strony pamięci w przestrzeni adresowej procesu w przyszłości, w chwili mapowania ich do przestrzeni procesu.


Struktura sched_param (funkcja 154) z /usr/include/bits/sched.h:

	struct sched_param {
    		int __sched_priority;
  	};


Polityka dla szeregowania zadań (funkcje 156,157,159,160) z /usr/include/bits/sched.h:

Sposoby szeregowania zadań
nazwa wartość opis
SCHED_OTHER
0
Domyślny sposób szeregowania zadań
SCHED_FIFO
1
Pierwszy na wejściu, pierwszy na wyjściu
SCHED_RR
2
Szeregowanie cykliczne


Struktura timespec (funkcja 162 i inne) z man nanosleep:

	struct timespec	{
		time_t  tv_sec;         /* sekundy */
		long    tv_nsec;        /* nanosekundy */
	};


Flagi dla funkcji sys_mremap (numer 163) z /usr/include/linux/mman.h:

Możliwości remapowania pamięci
nazwa wartość opis
MREMAP_MAYMOVE
1
Można przenosić te strony
MREMAP_FIXED
2
Nie można przenosić stron.


Kody funkcji dla funkcji sys_vm86 (numer 166) z /usr/include/asm/vm86.h:

Funkcje Trybu wirtualnego 8086
nazwa wartość
VM86_PLUS_INSTALL_CHECK
0
VM86_ENTER
1
VM86_ENTER_NO_BYPASS
2
VM86_REQUEST_IRQ
3
VM86_FREE_IRQ
4
VM86_GET_IRQ_BITS
5
VM86_GET_AND_RESET_IRQ
6


Struktura "vm86plus_struct" (funkcja 113) z /usr/include/asm/vm86.h:

	struct vm86plus_struct {
	        struct vm86_regs regs;
	        unsigned long flags;
	        unsigned long screen_bitmap;
	        unsigned long cpu_type;
	        struct revectored_struct int_revectored;
	        struct revectored_struct int21_revectored;
	        struct vm86plus_info_struct vm86plus;
	};

	struct vm86plus_info_struct {
	        unsigned long force_return_for_pic:1;
	        unsigned long vm86dbg_active:1;       /* dla debuggera */
	        unsigned long vm86dbg_TFpendig:1;     /* dla debuggera */
	        unsigned long unused:28;
	        unsigned long is_vm86pus:1;           /* do użytku
	        				 wewnętrznego trybu vm86*/
	        unsigned char vm86dbg_intxxtab[32];   /* dla debuggera */
	};


Numery podfunkcji dla funkcji sys_query_module (numer 167) z /usr/include/linux/module.h:

Odpytywanie modułów jądra
nazwa wartość co zwraca
brak
0
zawsze sukces
QM_MODULES
1
bufor: nazwy oddzielone znakiem zerowym
[EDI] = liczba modułów
QM_DEPS
2
w buforze: nazwy modułów używane przez podany moduł,
[EDI] = liczba takich modułów
QM_REFS
3
w buforze: nazwy modułów używające podanego modułu,
[EDI] = liczba takich modułów
QM_SYMBOLS
4
bufor: eksportowane symbole i wartości. Format: struktury module_symbol (patrz niżej) i nazwy oddzielone znakiem zerowym.
[EDI] = liczba symboli
QM_INFO
5
Format bufora: struktury module_info (patrz niżej)
[EDI] = rozmiar struktury module_info
	struct module_symbol	{
		unsigned long value;
		unsigned long name;	/* adres łańcucha znaków od
						 początku bufora */
	};

	struct module_info	{
		unsigned long address;	/* adres modułu */
		unsigned long size;	/* zajmowana pamięć */
		unsigned long flags;	/* stan: MOD_RUNNING,
					  MOD_AUTOCLEAN, ... */
	};


Struktura "pollfd" dla funkcji sys_poll (numer 168) z man poll:

	struct pollfd {
		int fd;		/* deskryptor otwartego pliku */
		short events;	/* maska zdarzeń (patrz niżej) do
					 monitorowania */
		short revents;	/* powrotna maska zdarzeń znalezionych
					(patrz niżej) */
	};

Zdarzenia z /usr/include/sys/poll.h:

Zdarzenia dla funkcji sys_poll
nazwa wartość co oznacza
POLLIN
0x0001
mogą być czytane (bez blokowania) dane o priorytecie innym niż wysoki
POLLPRI
0x0002
mogą być czytane dane o priorytecie wysokim
POLLOUT
0x0004
mogą być zapisywane dane normalne
POLLWRNORM
POLLOUT
jak POLLOUT.
POLLERR
0x0008
błąd
POLLHUP
0x0010
rozłączenie
POLLNVAL
0x0020
deskryptor jest nieprawidłowy
POLLRDNORM
0x0040
mogą być czytane dane normalne
POLLNORM
POLLRDNORM
jak POLLRDNORM.
POLLRDBAND
0x0080
mogą być czytane dane priorytetowe
POLLWRBAND
0x0100
mogą być zapisywane dane priorytetowe


Komendy w funkcji sys_nfsservctl (numer 169) z man nfsservctl i /usr/include/linux/nfsd/syscall.h:

Komendy kontroli serwera NFS
nazwa wartość co oznacza
NFSCTL_SVC
0
to jest proces serwera
NFSCTL_ADDCLIENT
1
dodanie klienta NFS
NFSCTL_DELCLIENT
2
usunięcie klienta NFS
NFSCTL_EXPORT
3
eksportowanie systemu plików
NFSCTL_UNEXPORT
4
zaprzestanie eksportowania systemu plików
NFSCTL_UGIDUPDATE
5
uaktualnienie mapy uid/gid klienta
NFSCTL_GETFH
6
otrzymanie fh przez ino (używane przez mountd)
NFSCTL_GETFD
7
otrzymanie fh przez ścieżkę (używane przez mountd)
NFSCTL_GETFS
8
otrzymanie fh przez ścieżkę z maksymalną długością FH
NFSCTL_FODROP
50
odrzuć żądania w czasie awarii
NFSCTL_STOPFODROP
51
przestań odrzucać żądania
NFSCTL_FOLOCKS
52
porzuć blokady w czasie awarii
NFSCTL_FOGRACE
53
set grace period for failover
NFSCTL_FOSERV
54
remove service mon for failover

Struktura "nfsctl_arg" i unia "nfsctl_res" dla funkcji sys_nfsservctl (numer 169) z man nfsservctl:

       struct nfsctl_arg {
		int                     ca_version;     /*zabezpieczenie*/
		union {
			struct nfsctl_svc	u_svc;
			struct nfsctl_client	u_client;
			struct nfsctl_export	u_export;
			struct nfsctl_uidmap	u_umap;
			struct nfsctl_fhparm	u_getfh;
			struct nfsctl_fdparm	u_getfd;
			struct nfsctl_fsparm	u_getfs;
			struct nfsctl_fodrop	u_fodrop;
		} u;
	}

	union nfsctl_res {
		__u8			cr_getfh[NFS_FHSIZE];
		struct knfsd_fh		cr_getfs;
	};

	/* SVC */
	struct nfsctl_svc {
		unsigned short		svc_port;
		int			svc_nthreads;
	};

	/* ADDCLIENT/DELCLIENT */
	struct nfsctl_client {
		char			cl_ident[NFSCLNT_IDMAX+1];
		int			cl_naddr;
		struct in_addr		cl_addrlist[NFSCLNT_ADDRMAX];
		int			cl_fhkeytype;
		int			cl_fhkeylen;
		unsigned char		cl_fhkey[NFSCLNT_KEYMAX];
	};

	/* EXPORT/UNEXPORT */
	struct nfsctl_export {
		char			ex_client[NFSCLNT_IDMAX+1];
		char			ex_path[NFS_MAXPATHLEN+1];
		__kernel_dev_t		ex_dev;
		__kernel_ino_t		ex_ino;
		int			ex_flags;
		__kernel_uid_t		ex_anon_uid;
		__kernel_gid_t		ex_anon_gid;
	};

	/* UGIDUPDATE */
	struct nfsctl_uidmap {
		char *			ug_ident;
		__kernel_uid_t		ug_uidbase;
		int			ug_uidlen;
		__kernel_uid_t *	ug_udimap;
		__kernel_gid_t		ug_gidbase;
		int			ug_gidlen;
		__kernel_gid_t *	ug_gdimap;
	};

	/* GETFH */
	struct nfsctl_fhparm {
		struct sockaddr		gf_addr;
		__kernel_dev_t		gf_dev;
		__kernel_ino_t		gf_ino;
		int			gf_version;
	};

	/* GETFD */
	struct nfsctl_fdparm {
		struct sockaddr		gd_addr;
		char			gd_path[NFS_MAXPATHLEN+1];
		int			gd_version;
	};

	/* GETFS - Pobierz uchwyt do pliku wraz z rozmiarem */
	struct nfsctl_fsparm {
		struct sockaddr		gd_addr;
		char			gd_path[NFS_MAXPATHLEN+1];
		int			gd_maxlen;
	};

	/* FODROP/STOPFODROP */
	struct nfsctl_fodrop {
		char			fo_dev[NFS_MAXPATHLEN+1];
		__u32			fo_timeout;
	};


Opcje w funkcji sys_prctl (numer 172) z man prctl i /usr/include/linux/prctl.h:

Operacje na procesie
nazwa wartość co oznacza
PR_SET_PDEATHSIG
1
ECX=numer sygnału, który otrzyma proces potomny po zakończeniu rodzica
PR_GET_PDEATHSIG
2
wczytaj bieżący numer sygnału, który otrzyma proces potomny po zakończeniu rodzica do [ECX]
PR_GET_DUMPABLE
3
pobranie informacji, czy program ma zrzucać rdzeń (core dump), zwraca w EAX
PR_SET_DUMPABLE
4
ustawienie, czy program ma zrzucać rdzeń (core dump) ECX=0 (nie) ECX=1 (tak)
PR_GET_UNALIGN
5
pobierz bity kontroli dostępu do nieułożonych danych? (unaligned access control bits), wynik w EAX?
PR_SET_UNALIGN
6
ustaw bity kontroli dostępu do nieułożonych danych (unaligned access control bits) ECX=1 (nie rób nic), ECX=2 (generuj sygnał SIGBUS)
PR_GET_KEEPCAPS
7
zachowanie możliwości procesu (keep capabilities), zwraca w EAX
PR_SET_KEEPCAPS
8
zachowanie możliwości procesu (keep capabilities), ECX=1 (tak) ECX=0 (nie)
PR_GET_FPEMU
9
pobierz bity kontroli emulacji FPU, zwraca w EAX?
PR_SET_FPEMU
10
ustaw bity kontroli emulacji FPU, ECX=1 (emulacja włączona) ECX=2 (generuj sygnał SIGFPE)
PR_GET_FPEXC
11
pobierz tryb wyjątków FPU, zwraca w EAX?
PR_SET_FPEXC
12
ustaw tryb wyjątków FPU, ECX=0 (wyłączone) ECX=1 (async non-recoverable exc. mode), ECX=2 (async recoverable exception mode), ECX=3 (precise exception mode)
PR_GET_TIMING
13
pobierz tryb mierzenia czasu procesu, zwraca w EAX?
PR_SET_TIMING
14
pobierz tryb mierzenia czasu procesu, ECX=0 (normalny) ECX=1 (dokładny)


Struktury dla funkcji sys_capget (numer 184) i sys_capset (numer 185) z /usr/include/linux/capability.h:

	typedef struct __user_cap_header_struct {
		__u32 version;
		int pid;
	} *cap_user_header_t;

	typedef struct __user_cap_data_struct {
	        __u32 effective;
	        __u32 permitted;
	        __u32 inheritable;
	} *cap_user_data_t;


Struktura "stack_t" dla funkcji sys_sigaltstack (numer 186) z /usr/include/asm/signal.h:

	SS_ONSTACK	0x0001
	SS_DISABLE	0x0004

	typedef struct sigaltstack {	// stack_t
		void *ss_sp;		// int (dword)
		int ss_flags;	// int (dword), SS_ONSTACK lub SS_DISABLE
		size_t ss_size;		// int (dword)
	} stack_t;


Struktura "stat64" dla funkcji sys_*stat64 (numer 195, 196, 197) z /usr/include/asm/stat.h:

	struct stat64 {
		unsigned long long	st_dev;
		unsigned char	__pad0[4];

		unsigned long	__st_ino;

		unsigned int	st_mode;
		unsigned int	st_nlink;

		unsigned long	st_uid;
		unsigned long	st_gid;

		unsigned long long	st_rdev;
		unsigned char	__pad3[4];

		long long	st_size;
		unsigned long	st_blksize;

		/* Liczba zaalokowanych 512-bajtowych bloków. */
		unsigned long long	st_blocks;

		unsigned long	st_atime;
		unsigned long	st_atime_nsec;

		unsigned long	st_mtime;
		unsigned int	st_mtime_nsec;

		unsigned long	st_ctime;
		unsigned long	st_ctime_nsec;

		unsigned long long	st_ino;
	};


Informacja dla jądra o korzystaniu z pamięci dla funkcji sys_madvise (numer 219) z /usr/include/bits/mman.h:

Informowanie o sposobach korzystania z pamięci
nazwa wartość co oznacza
MADV_NORMAL
0
Żadnego specjalnego traktowania
MADV_RANDOM
1
Można oczekiwać losowych dostępów do tej pamięci
MADV_SEQUENTIAL
2
Można oczekiwać sekwencyjnego dostępu do tej pamięci
MADV_WILLNEED
3
Nasz proces będzie potrzebował tych stron pamięci
MADV_DONTNEED
4
Nasz proces nie potrzebuje tych stron pamięci


Makra "makedev" w składni FASM dla funkcji sys_mknod (numer 14) z /usr/include/sys/sysmacros.h:

	; maj = numer główny urządzenia
	; min = numer poboczny urządzenia

	; dla jądra 2.4
	macro	makedev24	maj, min
	{
		xor	esi, esi
		mov	edx, maj
		shl	edx, 8
		or	edx, min
	}

	; dla jądra 2.6
	macro	makedev26	maj, min
	{

		mov	edx, min
		and	edx, 0xff

		mov	esi, maj
		and	esi, 0xfff
		shl	esi, 8
		or	edx, esi

		xor	eax, eax
		mov	esi, min
		and	esi, not 0xff
		shld	eax, esi, 12
		shl	esi, 12

		or	edx, esi

	 	mov	esi, maj
	 	and	esi, not 0xfff

		or	esi, eax

	}


Numery sygnałów (funkcje 37, 48 i 238) z /usr/include/bits/signum.h:

Sygnały
nazwa wartość co oznacza
SIGHUP
1
"Rozłącz się" (hangup)
SIGINT
2
Przerwanie (na przykład naciśnięto Ctrl+C)
SIGQUIT
3
Wyjście
SIGILL
4
Procesor wykonał nieprawidłową instrukcję
SIGTRAP
5
Pułapka (przy śledzeniu wykonywania)
SIGABRT
6
Przerwanie działania
SIGIOT
6 (też!)
Pułapka IOT
SIGBUS
7
Błąd szyny (złe ustawienie danych - na przykład adres niepodzielny przez 4)
SIGFPE
8
Wyjątek koprocesora (wynik typu NaN, ale też dzielenie przez zero lub przepełnienie w dzieleniu)
SIGKILL
9
Zabicie procesu
SIGUSR1
10
Sygnał definiowany przez użytkownika
SIGSEGV
11
Naruszenie ochrony pamięci (segmentation fault)
SIGUSR2
12
Drugi sygnał definiowany przez użytkownika
SIGPIPE
13
Nieprawidłowy potok
SIGALRM
14
Budzik
SIGTERM
15
Żądanie zakończenia programu
SIGSTKFLT
16
Błąd stosu (koprocesora?)
SIGCHLD, SIGCLD
17
Zmienił się stan procesu potomnego
SIGCONT
18
Kontynuacja
SIGSTOP
19
Żądanie zatrzymania programu
SIGTSTP
20
Zatrzymanie (z) klawiatury (?)
SIGTTIN
21
Odczyt z terminala w tle
SIGTTOU
22
Zapis do terminala w tle
SIGURG
23
Pilne zdarzenie na gnieździe
SIGXCPU
24
Przekroczony limit procesora
SIGXFSZ
25
Przekroczony limit rozmiaru pliku
SIGVTALRM
26
Wirtualny budzik
SIGPROF
27
Budzik profilujący
SIGWINCH
28
Zmiana rozmiaru okna
SIGIO, SIGPOLL
29
Można wykonywać I/O
SIGPWR
30
Restart po awarii zasilania (?) / Błąd zasilania
SIGSYS
31
Nieprawidłowa funkcja systemowa
SIGUNUSED
31 (też!)
(nieużywane)


Operacje futex (funkcja 240) z /usr/include/linux/futex.h:

Operacje na futeksach
nazwa wartość co oznacza zwraca w EAX
FUTEX_WAIT
0
Sprawdza, czy wartość futeksu wynosi tyle, ile podano i czeka
0, gdy proces obudzono przez FUTEX_WAKE
FUTEX_WAKE
1
Budzi co najwyżej ECX procesów czekających na danym adresie
liczba obudzonych procesów
FUTEX_FD
2
Przyporządkuje futeksowi deskryptor pliku
nowy deskryptor pliku


Struktura user_desc (funkcja 243) z /usr/src/?/include/asm/ldt.h:

	struct user_desc {
		unsigned int  entry_number;	/* numer zmienianego lub
						pobieranego wpisu w TLS */
		unsigned long base_addr;	/* adres bazowy */
		unsigned int  limit;		/* limit */
		unsigned int  seg_32bit:1;	/* segment */
		unsigned int  contents:2;
		unsigned int  read_exec_only:1;	/* tylko RX */
		unsigned int  limit_in_pages:1;
		unsigned int  seg_not_present:1;/* czy nieobecny */
		unsigned int  useable:1;	/* można używać */
	};


Struktura io_event (funkcja 247) z /usr/src/?/include/linux/aio_abi.h:

	struct io_event {
		__u64	data;		/* pole danych */
		__u64	obj;		/* skąd przyszło zdarzenie */
		__s64	res;		/* kod wynikowy zdarzenia */
		__s64	res2;		/* wynik drugorzędny */
	};


Struktura iocb (funkcja 247) z /usr/src/?/include/linux/aio_abi.h:

	struct iocb {
		/* do wewnętrznego użytku jądra/libc. */
		__u64	aio_data; /*dane do zwrócenia jako dane zdarzenia*/
		__u32	aio_key, aio_reserved1;
				/* jądro ustawia aio_key na żądany numer */

		/* pola wspólne */
		__u16	aio_lio_opcode;	/* zobacz: IOCB_CMD_ */
		__s16	aio_reqprio;
		__u32	aio_fildes;

		__u64	aio_buf;
		__u64	aio_nbytes;
		__s64	aio_offset;

		/* parametry dodatkowe */
		__u64	aio_reserved2;	/*w przyszłości będzie to wskaźnik
					 na strukturę sigevent */
		__u64	aio_reserved3;
	};


Struktura epoll_event (funkcja 255 i 256) z man 2 epoll_ctl:

	typedef union epoll_data {
		void *ptr;
		int fd;
		__uint32_t u32;
		__uint64_t u64;
	} epoll_data_t;

	struct epoll_event {
		__uint32_t events;  /* zdarzenia Epoll */
		epoll_data_t data;  /* Zmienna danych użytkownika */
	};


Operacje epoll (funkcja 255) z /usr/include/sys/epoll.h:

Operacje na deskryptorze epoll
nazwa wartość co oznacza
EPOLL_CTL_ADD
1
Dodaj deskryptor EDX do deskryptora "epoll" w EBX
EPOLL_CTL_DEL
2
Usuń deskryptor EDX do deskryptora "epoll" w EBX
EPOLL_CTL_MOD
3
Zmień zdarzenie (struktura epoll_event) związane z deskryptorem EDX


Struktura sigevent (funkcja 259) z /usr/include/asm/siginfo.h:

	#define SIGEV_MAX_SIZE	64
	#define SIGEV_PAD_SIZE	((SIGEV_MAX_SIZE/sizeof(int)) - 3)

	typedef struct sigevent {
		sigval_t sigev_value;
		int sigev_signo;
		int sigev_notify;
		union {
			int _pad[SIGEV_PAD_SIZE];

			struct {
				void (*_function)(sigval_t);
				void *_attribute;   /* pthread_attr_t */
			} _sigev_thread;
		} _sigev_un;
	} sigevent_t;

	/* Dla funkcji mq_notify podana jest taka definicja
		w man mq_notify: */

         union sigval {                /* Przekazane dane */
             int     sival_int;        /* Wartość całkowita */
             void   *sival_ptr; /* Wskaźnik (tak dosłownie mówi manual) */
         };

         struct sigevent {
             int    sigev_notify;      /* Sposób powiadomienia 0=sygnał,
             				 1=nic, 2=utwórz wątek*/
             int    sigev_signal;      /* Numer sygnału powiadomienia */
             union sigval sigev_value; /* Przekazane dane */
             void (*sigev_notify_function) (union sigval);
                                       /* Funkcja powiadamiania wątku */
             void  *sigev_notify_attributes;
                                       /* Atrybuty funkcji wątku */
         };



Struktura itimerspec (funkcja 260) z /usr/include/time.h:

	struct itimerspec {
    		struct timespec it_interval;
    		struct timespec it_value;
  	};


Identyfikatory zegara (funkcje 264-267) z /usr/include/bits/time.h:

Identyfikatory zegarów w systemie
nazwa wartość co oznacza
CLOCK_REALTIME
0
Systemowy zegar czasu rzeczywistego
CLOCK_MONOTONIC
1
Systemowy zegar monotoniczny
CLOCK_PROCESS_CPUTIME_ID
2
Wysokiej rozdzielczości zegar CPU (dla procesu)
CLOCK_THREAD_CPUTIME_ID
3
Wysokiej rozdzielczości zegar CPU (dla wątku)


Struktura statfs64 (funkcje 268 i 269) z /usr/include/bits/statfs.h:

	struct statfs64  {
    		__SWORD_TYPE f_type;		/* 32 bity */
    		__SWORD_TYPE f_bsize;
    		__fsblkcnt64_t f_blocks;	/* 64 bity */
    		__fsblkcnt64_t f_bfree;
    		__fsblkcnt64_t f_bavail;
    		__fsfilcnt64_t f_files;
    		__fsfilcnt64_t f_ffree;
    		__fsid_t f_fsid;	/* struct { int __val[2]; } */
    		__SWORD_TYPE f_namelen;
    		__SWORD_TYPE f_frsize;
    		__SWORD_TYPE f_spare[5];
  	};


Polityka dla pamięci (funkcja 274) z /usr/include/numaif.h i man 2 mbind:

Rodzaje polityki odnośnie pamięci
nazwa wartość co oznacza
MPOL_DEFAULT
0
Użyj domyślnej polityki procesu
MPOL_PREFERRED
1
Ustal preferowany węzeł do alokacji
MPOL_BIND
2
Ogranicz alokację pamięci tylko do podanych węzłów
MPOL_INTERLEAVE
3
Optymalizacja przepustowości na rzecz czasu trwania


Flagi dla pamięci (funkcja 274) z /usr/src/kernels/.../include/linux/mempolicy.h:

Flagi dla polityki odnośnie pamięci
nazwa wartość co oznacza
MPOL_MF_STRICT
(1<<0)
Sprawdź, czy strony pamięci odpowiadają polityce. Jeśli nie odpowiadają polityce domyślnej lub nie mogą zostać przesunięte MPOL_MF_MOVE*, zwracany jest błąd EIO.
MPOL_MF_MOVE
(1<<1)
Przesuń strony pamięci tego procesu, by odpowiadały polityce
MPOL_MF_MOVE_ALL
(1<<2)
Przesuń wszystkie strony pamięci, by odpowiadały polityce


Struktura mq_attr (funkcja 277) z man 3 mq_getattr:

         struct mq_attr {
             long mq_flags;    /* Flagi: 0 lub O_NONBLOCK */
             long mq_maxmsg;   /* Max. liczba wiadomości w kolejce */
             long mq_msgsize;  /* Max. rozmiar wiadomości w bajtach */
             long mq_curmsgs;  /* Liczba wiadomości aktualnie w kolejce */
         };


Struktura siginfo (funkcja 277) z /usr/include/asm/siginfo.h:

     typedef struct siginfo {
	int si_signo;
	int si_errno;
	int si_code;

	union {
		int _pad[SI_PAD_SIZE];

		/* kill() */
		struct {
			pid_t _pid;		/* pid wysyłającego */
			uid_t _uid;		/* uid wysyłającego */
		} _kill;

		/* czasomierze POSIX.1b */
		struct {
			unsigned int _timer1;
			unsigned int _timer2;
		} _timer;

		/* sygnały POSIX.1b */
		struct {
			pid_t _pid;		/* pid wysyłającego */
			uid_t _uid;		/* uid wysyłającego */
			sigval_t _sigval;
		} _rt;

		/* SIGCHLD */
		struct {
			pid_t _pid;		/* który potomek */
			uid_t _uid;		/* uid wysyłającego */
			int _status;		/* kod wyjścia */
			clock_t _utime;
			clock_t _stime;
		} _sigchld;

		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
		struct {
			void *_addr; /* instrukcja, która wywołała błąd */
		} _sigfault;

		/* SIGPOLL */
		struct {
			int _band;	/* POLL_IN, POLL_OUT, POLL_MSG */
			int _fd;
		} _sigpoll;
	} _sifields;
     } siginfo_t;


Flagi dla inotify (funkcja 292) z /usr/src/kernels/.../include/linux/inotify.h:

Flagi dla powiadamiania o zdarzeniach na obserwowanym obiekcie
nazwa wartość co oznacza
IN_ACCESS
0x00000001
Dostęp do obiektu
IN_MODIFY
0x00000002
Obiekt został zmodyfikowany
IN_ATTRIB
0x00000004
Zmiana atrybutów
IN_CLOSE_WRITE
0x00000008
Zamknięcie pliku otwartego do zapisu
IN_CLOSE_NOWRITE
0x00000010
Zamknięcie pliku nie otwartego do zapisu
IN_OPEN
0x00000020
Obiekt został otwarty
IN_MOVED_FROM
0x00000040
Z obserwowanego katalogu przeniesiono plik
IN_MOVED_TO
0x00000080
Do obserwowanego katalogu przeniesiono plik
IN_CREATE
0x00000100
W obserwowanym katalogu utworzono plik
IN_DELETE
0x00000200
W obserwowanym katalogu skasowano plik
IN_DELETE_SELF
0x00000400
Obserwowany obiekt został usunięty
IN_MOVE_SELF
0x00000800
Obiekt został przeniesiony
IN_UNMOUNT
0x00002000
System plików został odmontowany
IN_Q_OVERFLOW
0x00004000
Przepełnienie kolejki zdarzeń
IN_IGNORED
0x00008000
Plik został zignorowany
IN_ONLYDIR
0x01000000
Obserwuj ścieżkę tylko gdy jest katalogiem
IN_DONT_FOLLOW
0x02000000
Nie podążaj za dowiązaniami symbolicznymi
IN_MASK_ADD
0x20000000
Jeśli ten obiekt już jest obserwowany, to dopisz dane zdarzenia do obserwacji
IN_ISDIR
0x40000000
Zaszło zdarzenie na katalogu
IN_ONESHOT
0x80000000
Obserwuj daną ścieżkę tylko do pierwszego zdarzenia



Wartości dla funkcji sys_ioprio (numer 289 i 290) z /usr/src/.../include/linux/fcntl.h
nazwa wartość znaczenie
IOPRIO_WHO_PROCESS
0
ECX to numer pojedynczego procesu
IOPRIO_WHO_PGRP
1
ECX to identyfikator grupy procesów
IOPRIO_WHO_USER
2
ECX to identyfikator użytkownika



Flagi synchronizacji dla funkcji sys_sync_file_range (numer 314) z /usr/src/.../include/linux/fs.h
nazwa wartość znaczenie
SYNC_FILE_RANGE_WAIT_BEFORE
1
Czekaj na synchronizację zmienionych stron, które są zaznaczone do zapisania, przed jakimkolwiek zapisem
SYNC_FILE_RANGE_WRITE
2
Zacznij synchronizację zmienionych stron, które nie są zaznaczone do zapisania
SYNC_FILE_RANGE_WAIT_AFTER
4
Czekaj na synchronizację zmienionych stron, po jakimkolwiek zapisie



Opcje dla funkcji sigprocmask (numer 175) z /usr/include/asm/signal.h
nazwa wartość znaczenie
SIG_BLOCK
0
Zestaw blokowanych sygnałów jest sumą bieżącego zestawu i zestawu w [ECX]
SIG_UNBLOCK
1
Sygnały z [ECX] zostają odblokowane
SIG_SETMASK
2
Zestaw blokowanych sygnałów jest ustawiany na [ECX]



Opcje dla funkcji fadvice (numer 272) z /usr/include/bits/fcntl.h
nazwa wartość znaczenie
POSIX_FADV_NORMAL
0
Domyślny dostęp
POSIX_FADV_RANDOM
1
Dostęp w losowej kolejności
POSIX_FADV_SEQUENTIAL
2
Dostęp sekwencyjny
POSIX_FADV_WILLNEED
3
Te dane będą potrzebne w najbliższej przyszłości
POSIX_FADV_DONTNEED
4
Te dane nie będą potrzebne w najbliższej przyszłości
POSIX_FADV_NOREUSE
5
Dane będą potrzebne tylko raz



Flagi dla funkcji splice (numer 313), vmsplice (numer 316) i tee (numer 315) z /usr/include/bits/fcntl.h
nazwa wartość znaczenie
SPLICE_F_MOVE
1
Spróbuj przenieść strony pamięci zamiast kopiowania. Nic nie robi w sys_tee. Nieużywane w sys_vmsplice.
SPLICE_F_NONBLOCK
2
Nie blokuj w czasie operacji wejścia-wyjścia
SPLICE_F_MORE
4
W kolejnych wywołaniach będą dalsze dane. Nic nie robi w sys_tee i sys_vmsplice.
SPLICE_F_GIFT
8
Nieużywane w sys_splice i sys_tee. W sys_vmsplice oznacza darowanie tych stron pamięci dla jądra.



Flagi dla funkcji shmget (numer 29 w x86-64) z /usr/include/linux/ipc.h i /usr/include/bits/shm.h
nazwa wartość ósemkowo znaczenie
IPC_CREAT
00001000
Stwórz nowy segment
IPC_EXCL
00002000
Wyłączny dostęp do segmentu
SHM_HUGETLB
04000
Alokuj używając "wielkich stron" pamięci.
SHM_NORESERVE
010000
Nie rezerwuj przestrzeni wymiany dla tego segmentu
tryb dostępu
000-777
Takie samo znaczenie, jak we flagach dostępu



Flagi dla funkcji shmat (numer 30 w x86-64) z /usr/include/bits/shm.h
nazwa wartość ósemkowo znaczenie
SHM_RDONLY
010000
Podłącz segment tylko do odczytu.
SHM_RND
020000
Zaokrąglaj adres w dół do wielokrotności SHMLBA.
SHM_REMAP
040000
Zmień wszystkie mapowania w segmencie



Rozkazy dla funkcji shmctl (numer 31 w x86-64) z /usr/include/linux/ipc.h i /usr/include/bits/shm.h
nazwa wartość znaczenie i wartość zwracana
IPC_RMID
0
Zaznacz segment do usunięcia. Zwraca 0.
IPC_SET
1
Zapisz niektóre elementy podanej struktury do jądra. Zwraca 0.
IPC_STAT
2
Skopiuj dane z jądra o podanym segmencie do podanej struktury. Zwraca 0.
IPC_INFO
3
Zwróć informacje o limitach i parametrach współdzielonej pamięci. Zwraca ostatni indeks w tablicy jądra do współdzielonej pamięci.
SHM_LOCK
11
Zapobiega wymianie (swapowaniu) segmentu. Zwraca 0.
SHM_UNLOCK
12
Umożliwia wymianę (swapowanie) segmentu. Zwraca 0.
SHM_STAT
13
Podobne do IPC_STAT, ale identyfikator oznacza numer w tablicy jądra. Zwraca identyfikator segmentu o danym numerze.
SHM_INFO
14
Zwróć informacje o zasobach używanych przez współdzieloną pamięć. Zwraca ostatni indeks w tablicy jądra do współdzielonej pamięci.

Struktura shmid_ds (funkcja 31 w x86-64) z /usr/include/bits/shm.h:

	struct shmid_ds {
		struct ipc_perm shm_perm;    /* Właściciel i uprawnienia */
		size_t          shm_segsz;   /* Rozmiar segmentu w bajtach */
		time_t          shm_atime;   /* Czas ostatniego dołączenia */
		time_t          shm_dtime;   /* Czas ostatniego odłączenia */
		time_t          shm_ctime;   /* Czas ostatniej zmiany */
		pid_t           shm_cpid;    /* PID twórcy */
		pid_t           shm_lpid;    /* PID ostatniej operacji shmat
						lub shmdt */
		shmatt_t        shm_nattch;  /* Bieżąca liczba podłączeń */
		...
	};



Domeny dla gniazd (funkcja 41 w x86-64) z /usr/include/bits/socket.h
nazwa wartość znaczenie
AF_UNIX, AF_LOCAL
1
Lokalna komunikacja
AF_INET
2
Protokoły IPv4
AF_AX25
3
Protokół AX.25 amatorskiego radia
AF_IPX
4
Protokoły Novell IPX
AF_APPLETALK
5
Appletalk
AF_NETROM
6
Amatorskie radio NetROM
AF_BRIDGE
7
Mostek wieloprotokołowy
AF_ATMPVC
8
Dostęp do surowych ATM PVC
AF_X25
9
Protokół ITU-T X.25 / ISO-8208
AF_INET6
10
Protokoły IPv6
AF_ROSE
11
Amatorskie radio X.25 PLP
AF_DECnet
12
Zarezerwowane dla projektu DECnet
AF_NETBEUI
13
Zarezerwowane dla projektu 802.2LLC
AF_SECURITY
14
Pseudo-domena dla wywołania zwrotnego zabezpieczeń
AF_KEY
15
Interfejs zarządzania kluczami
AF_NETLINK
16
Urządzenie interfejsu do jądra
AF_PACKET
17
Niskopoziomowy interfejs pakietowy
AF_ASH
18
Ash
AF_ECONET
19
Acorn Econet
AF_ATMSVC
20
ATM SVC
AF_SNA
22
Projekt Linux SNA
AF_IRDA
23
Gniazda IrDA
AF_PPPOX
24
Gniazda PPPoX
AF_WANPIPE
25
Interfejs do gniazd Wanpipe
AF_BLUETOOTH
31
Gniazda Bluetooth



Typy gniazd (funkcja 41 w x86-64) z /usr/include/bits/socket.h
nazwa wartość znaczenie
SOCK_STREAM
1
Sekwencjonowany, wiarygodny, dwukierunkowy, opary na połączeniu strumień bajtów
SOCK_DGRAM
2
Obsługuje datagramy (bez połączenia, niewiarygodny)
SOCK_RAW
3
Dostęp bezpośredni do protokołów sieciowych
SOCK_RDM
4
Wiarygodna warstwa datagramów bez gwarancji kolejności.
SOCK_SEQPACKET
5
Sekwencjonowany, wiarygodny, dwukierunkowy, opary na połączeniu strumień bajtów. Odbiorca musi przeczytać cały pakiet za każdym czytaniem.
SOCK_PACKET
10
Przestarzałe, nie używać
SOCK_NONBLOCK
04000 ósemkowo
Ustaw tryb nieblokujący.
SOCK_CLOEXEC
02000000 ósemkowo
Ustaw flagę zamknij-podczas-exec.



Flagi dla funkcji sendto (numer 44 w x86-64) i recvfrom (numer 45 w x86-64) z /usr/include/bits/socket.h
nazwa wartość znaczenie
MSG_CONFIRM
0x800
(sendto) Potwierdzenie otrzymania odpowiedzi
MSG_DONTROUTE
0x04
(sendto) Nie używaj bramki do wysyłania, wyślij bezpośrednio
MSG_DONTWAIT
0x40
(sendto, recvfrom) Włącz tryb nieblokujący
MSG_EOR
0x80
(sendto) Koniec rekordu danych
MSG_MORE
0x8000
(sendto) Uruchamiający ma więcej danych do wysłania
MSG_NOSIGNAL
0x4000
(sendto) Nie wysyłaj sygnałów
MSG_OOB
0x01
(sendto, recvfrom) Wyślij dane poza kolejnością
MSG_CMSG_CLOEXEC
0x40000000
(recvmsg) Ustaw flagę zamknij-podczas-exc na deskryptorze otrzymanym podczas operacji SCM_RIGHTS
MSG_ERRQUEUE
0x2000
(recvfrom) Błędy powinny być odbierane przez kolejkę błędów gniazda
MSG_PEEK
0x02
(recvfrom) Pobierz dane z kolejki bez usuwania ich z kolejki
MSG_TRUNC
0x20
(recvfrom) Zwróć prawdziwą długość danych, nawet gdy bufor był mniejszy
MSG_WAITALL
0x100
(recvfrom) Czekaj na pełne zakończenie operacji

Struktura msghdr (funkcja 46 w x86-64) z man 2 sendmsg:

		struct msghdr {
			void         *msg_name;       /* opcjonalny adres */
			socklen_t     msg_namelen;    /* rozmiar adresu */
			struct iovec *msg_iov;        /* tablica wysyłania i
							 zbierania */
			size_t        msg_iovlen;     /* liczba elementów w
							  msg_iov */
			void         *msg_control;    /* dane pomocnicze */
			socklen_t     msg_controllen; /* długość bufora danych
							 pomocniczych */
			int           msg_flags;      /* flagi na odebranej
							 wiadomości: MSG_EOR,
							 MSG_TRUNC, MSG_CTRUNC,
							 MSG_OOB, MSG_ERRQUEUE*/
			};


Struktura sembuf (funkcja 65 w x86-64) z /usr/include/sys/sem.h:

	struct sembuf
	{
		unsigned short int sem_num;   /* liczba semaforów */
		short int sem_op;             /* operacja na semaforze:
						 liczba dodatnia jest dodawana
						 zero oznacza czekanie na zero
						liczba ujemna jest odejmowana*/
		short int sem_flg;            /* flaga operacji:
						 IPC_NOWAIT=04000 ósemkowo
						 lub SEM_UNDO=0x1000 */
	};



Rozkazy dla semaforów (funkcja 66 w x86-64) z /usr/include/bits/sem.h i /usr/include/bits/ipc.h
nazwa wartość znaczenie i wartość zwracana
IPC_RMID
0
Usuń zestaw semaforów. Zwraca 0.
IPC_SET
1
Kopiuj dane z tablicy buf o adresie podanym w R10 do struktur jądra. Zwraca 0.
IPC_STAT
2
Kopiuj dane ze struktur jądra do tablicy buf o adresie podanym w R10. Zwraca 0.
IPC_INFO
3
Zwróć w buf w R10 informacje o systemowych limitach i parametrach semaforów. Zwraca numer ostatniego używanego elementu w tablicy jądra.
GETPID
11
Zwraca PID procesu, który wykonał ostatnią operację na tym semaforze
GETVAL
12
Zwraca wartość podanego semafora w zestawie
GETALL
13
Do tablicy array o adresie podanym w R10 wpisuje wartości wszystkich semaforów w systemie. Zwraca 0.
GETNCNT
14
Zwraca liczbę procesów czekających na zwiększenie się podanego semafora w zestawie
GETZCNT
15
Zwraca liczbę procesów czekających na wyzerowanie się podanego semafora w zestawie
SETVAL
16
Ustaw wartości podane semafora w zestawie na tę podaną w R10. Zwraca 0.
SETALL
17
Ustaw wartości wszystkich semaforów na te podane w tablicy array o adresie podanym w R10. Zwraca 0.
SEM_STAT
18
Podobne do IPC_STAT, lecz identyfikator zestawu semaforów jest numerem semafora w tablicy jądra. Zwraca identyfikator zestawu semaforów o podanym numerze.
SEM_INFO
19
Podobne do IPC_INFO, zwraca inne wartości w niektórych polach (man semctl) Zwraca numer ostatniego używanego elementu w tablicy jądra.

Unia semun (funkcja 66 w x86-64) z man 2 semctl:

		union semun {
			int              val;   /* Wartość dla SETVAL */
			struct semid_ds *buf;   /* Bufor na IPC_STAT, IPC_SET */
			unsigned short  *array; /* Tablica dla GETALL, SETALL */
			struct seminfo  *__buf; /* Bufor dla IPC_INFO */
		};


Struktura msgp (funkcja 69 w x86-64) z man 2 msgsnd:

		struct msgbuf {
			long mtype;       /* typ wiadomości, musi być > 0 */
			char mtext[1];    /* dane wiadomości */
		};



Flagi dla funkcji msgrcv (numer 70 w x86-64) z /usr/include/bits/msq.h
nazwa wartość ósemkowo znaczenie
IPC_NOWAIT
04000
Nie czekaj na wiadomości
MSG_EXCEPT
020000
Odbierz pierwszą wiadomość NIE będącą podanego typu
MSG_NOERROR
010000
Obcinaj wiadomości do podanego rozmiaru


Struktura msqid_ds (funkcja 71 w x86-64) z man 2 msgctl:

	struct msqid_ds {
		struct ipc_perm msg_perm;     /* Właściciel i uprawnienia */
		time_t          msg_stime;    /* Czas ostatniego msgsnd */
		time_t          msg_rtime;    /* Czas ostatniego msgrcv */
		time_t          msg_ctime;    /* Czas ostatniej zmiany */
		unsigned long   __msg_cbytes; /* Aktualna liczba bajtów w
						 kolejce */
		msgqnum_t       msg_qnum;     /* Aktualna liczba wiadomości w
						 kolejce */
		msglen_t        msg_qbytes;   /* Maksymalna liczba bajtów
						 dozwolona w kolejce */
		pid_t           msg_lspid;    /* PID ostatniego msgsnd */
		pid_t           msg_lrpid;    /* PID ostatniego msgrcv */
	};

	struct ipc_perm {
		key_t          __key;       /* Klucz podany msgget */
		uid_t          uid;         /* Efektywny UID of właściciela */
		gid_t          gid;         /* Efektywny GID of właściciela */
		uid_t          cuid;        /* Efektywny UID of twórcy */
		gid_t          cgid;        /* Efektywny GID of twórcy */
		unsigned short mode;        /* Uprawnienia */
		unsigned short __seq;       /* Numer sekwencyjny */
	};



Rozkazy dla kolejek (funkcja 71 w x86-64) z /usr/include/bits/msq.h i /usr/include/bits/ipc.h
nazwa wartość znaczenie i wartość zwracana
IPC_RMID
0
Usuń kolejkę. Zwraca 0.
IPC_SET
1
Kopiuj dane z tablicy buf o adresie podanym w R10 do struktur jądra. Zwraca 0.
IPC_STAT
2
Kopiuj dane ze struktur jądra do tablicy buf o adresie podanym w R10. Zwraca 0.
IPC_INFO
3
Zwróć w buf w R10 informacje o systemowych limitach i parametrach kolejek. Zwraca numer ostatniego używanego elementu w tablicy jądra.
MSG_STAT
11
Podobne do IPC_STAT, lecz identyfikator zestawu semaforów jest numerem semafora w tablicy jądra. Zwraca identyfikator zestawu semaforów o podanym numerze.
MSG_INFO
12
Podobne do IPC_INFO, zwraca inne wartości w niektórych polach (man semctl) Zwraca numer ostatniego używanego elementu w tablicy jądra.



Podfunkcje dla arch_prctl (numer 158 w x86-64) z linux/arch/x86/include/asm/prctl.h
nazwa wartość znaczenie i wartość zwracana
ARCH_SET_FS
0x1002
Ustaw adres bazowy deskryptora FS na podany adres
ARCH_GET_FS
0x1003
Pobierz adres bazowy deskryptora FS do zmiennej pod podanym adresem
ARCH_SET_GS
0x1001
Ustaw adres bazowy deskryptora GS na podany adres
ARCH_GET_GS
0x1004
Pobierz adres bazowy deskryptora GS do zmiennej pod podanym adresem


Struktura getcpu_cache (funkcja 318) z linux/include/linux/getcpu.h:

		struct getcpu_cache {
			unsigned long blob[128 / sizeof(long)];
		};


Struktura robust_list_head (funkcja 312) z /usr/include/linux/futex.h:

		struct robust_list {
		        struct robust_list *next;
		};

		struct robust_list_head {

		        struct robust_list list;

        		long futex_offset;

        		struct robust_list *list_op_pending;
		};



Podfunkcje dla keyctl (numer 288) z /usr/include/linux/keyctl.h
nazwa wartość znaczenie
KEYCTL_GET_KEYRING_ID
0
Pobierz identyfikator zbioru kluczy
KEYCTL_JOIN_SESSION_KEYRING
1
Podłącz lub zacznij sesyjny zbiór kluczy
KEYCTL_UPDATE
2
Zaktualizuj klucz
KEYCTL_REVOKE
3
Unieważnij klucz
KEYCTL_CHOWN
4
Zmień właściciela klucza
KEYCTL_SETPERM
5
Ustaw uprawnienia do klucza
KEYCTL_DESCRIBE
6
Opisz klucz
KEYCTL_CLEAR
7
Wyczyść zawartość zbioru kluczy
KEYCTL_LINK
8
Połącz klucz ze zbiorem kluczy
KEYCTL_UNLINK
9
Odłącz klucz od zbioru kluczy
KEYCTL_SEARCH
10
Znajdź klucz w zbiorze kluczy
KEYCTL_READ
11
Odczytaj zawartość klucza lub zbioru kluczy
KEYCTL_INSTANTIATE
12
Stwórz częściowo skonstruowany klucz
KEYCTL_NEGATE
13
Zaneguj częściowo skonstruowany klucz
KEYCTL_SET_REQKEY_KEYRING
14
Ustaw domyslny zbiór kluczy dla zapytań o klucz
KEYCTL_SET_TIMEOUT
15
Ustaw czas trwania klucza
KEYCTL_ASSUME_AUTHORITY
16
Załóż uprawnienie do stworzenia klucza
KEYCTL_GET_SECURITY
17
Pobierz etykietę bezpieczeństwa klucza



Specjalne zbiory kluczy dla request_key (numer 287) z /usr/include/linux/keyctl.h
nazwa wartość znaczenie
KEY_SPEC_THREAD_KEYRING
-1
Zbiór kluczy specyficzny dla wątku
KEY_SPEC_PROCESS_KEYRING
-2
Zbiór kluczy specyficzny dla procesu
KEY_SPEC_SESSION_KEYRING
-3
Zbiór kluczy specyficzny dla sesji
KEY_SPEC_USER_KEYRING
-4
Zbiór kluczy specyficzny dla użytkownika
KEY_SPEC_USER_SESSION_KEYRING
-5
Zbiór kluczy specyficzny dla użytkownika i sesji
KEY_SPEC_GROUP_KEYRING
-6
Zbiór kluczy specyficzny dla grupy
KEY_SPEC_REQKEY_AUTH_KEY
-7
ID klucza dla przewidywanego klucza uwierzytelnienia dla request_key
KEY_SPEC_REQUESTOR_KEYRING
-8
ID klucza dla zbioru docelowego dla request_key


Struktura kexec_segment (funkcja 283) z man 2 kexec_load:

	struct kexec_segment
	{
		void   *buf;        /* bufor w przestrzeni użytkownika */
		size_t  bufsz;      /* długość bufora w przestrzeni użytkownika */
		void   *mem;        /* fizyczny adres jądra */
		size_t  memsz;      /* długość fizycznego adresu */
	};



Flagi dla kexec_load (numer 283) z linux-X.Y.Z/include/linux/kexec.h
nazwa wartość znaczenie
KEXEC_ON_CRASH
0x00000001
Uruchom nowe jądro po awarii systemu
KEXEC_PRESERVE_CONTEXT
0x00000002
Zachowaj stan oprogramowania i sprzętu przed uruchomieniem nowego jądra
KEXEC_ARCH_DEFAULT
( 0 << 16)
Architektura nowego jądra to architektura domyślna
KEXEC_ARCH_386
( 3 << 16)
Architektura nowego jądra to i386
KEXEC_ARCH_X86_64
(62 << 16)
Architektura nowego jądra to x86-64 (AMD64)
KEXEC_ARCH_PPC
(20 << 16)
Architektura nowego jądra to PowerPC
KEXEC_ARCH_PPC64
(21 << 16)
Architektura nowego jądra to PowerPC64
KEXEC_ARCH_IA_64
(50 << 16)
Architektura nowego jądra to IA-64
KEXEC_ARCH_ARM
(40 << 16)
Architektura nowego jądra to ARM
KEXEC_ARCH_S390
(22 << 16)
Architektura nowego jądra to S390
KEXEC_ARCH_SH
(42 << 16)
Architektura nowego jądra to SH
KEXEC_ARCH_MIPS
(10 << 16)
Architektura nowego jądra to MIPS
KEXEC_ARCH_MIPS_LE.
( 8 << 16)
Architektura nowego jądra to MIPS LE



Typy przestrzeni nazw dla sys_setns (numer 346) z linux-X.Y.Z/include/linux/sched.h
nazwa wartość znaczenie
CLONE_NEWIPC
0x08000000
deskryptor musi odnosić się do przestrzeni nazw IPC
CLONE_NEWNET
0x40000000
deskryptor musi odnosić się do sieciowej przestrzeni nazw
CLONE_NEWUTS
0x04000000
deskryptor musi odnosić się do przestrzeni nazw UTS


Struktura mmsghdr (funkcje 337 i 345) z man 2 recvmmsg:

	struct mmsghdr {
		struct msghdr msg_hdr;  /* Nagłówek wiadomości */
		unsigned int  msg_len;  /* Liczba otrzymanych bajtów nagłówka */
	};
Struktura msghdr została opisana wcześniej.


Flagi dla finit_module (numer 350) z linux-X.Y.Z/include/uapi/linux/module.h
nazwa wartość znaczenie
MODULE_INIT_IGNORE_MODVERSIONS
1
Ignoruj hashe wersji symboli
MODULE_INIT_IGNORE_VERMAGIC
2
Ignoruj identyfikator zgodnego jądra w module ("vermagic")


Struktura sched_attr (funkcje 351 i 352) z man 2 sched_setattr:

	struct sched_attr {
		u32 size;              /* Rozmiar tej struktury */
		u32 sched_policy;      /* Polityka  (SCHED_OTHER = 0,
						SCHED_BATCH = 3, SCHED_IDLE = 5,
						SCHED_FIFO = 1, SCHED_RR = 2,
						SCHED_DEADLINE = 6) */
		u64 sched_flags;       /* Flagi = 0 lub SCHED_FLAG_RESET_ON_FORK = 0x40000000 */
		s32 sched_nice;        /* Wartość priorytetu (SCHED_OTHER,
						SCHED_BATCH) */
		u32 sched_priority;    /* Statyczny priorytet (SCHED_FIFO,
						SCHED_RR) */
		/* Pozostałe pola są dla SCHED_DEADLINE */
		u64 sched_runtime;
		u64 sched_deadline;
		u64 sched_period;
	};



Flagi dla renameat2 (numer 353) z linux-X.Y.Z/include/uapi/linux/fs.h
nazwa wartość znaczenie
RENAME_EXCHANGE
1 << 1
Atomowo wymień 2 istniejące obiekty między sobą
RENAME_NOREPLACE
1 << 0
Nie nadpisuj ścieżki docelowej (błąd, gdy już istnieje)
RENAME_WHITEOUT
1 << 2
Utwórz obiekt nadpisujący (whiteout)


Struktura sock_fprog (funkcja 354) z man 2 seccomp:

	struct sock_fprog {
		unsigned short      len;    /* Liczba instrukcji BPF */
		struct sock_filter *filter; /* Adres tablicy instrukcji BPF */
	};

	struct sock_filter {
		__u16 code;                 /* Kod filtru */
		__u8  jt;                   /* Skok, gdy prawda */
		__u8  jf;                   /* Skok, gdy fałsz */
		__u32 k;                    /* Pole dowolnego użytku */
	};

	struct seccomp_data {
		int   nr;                   /* Numer funkcji systemowej */
		__u32 arch;                 /* wartość AUDIT_ARCH_* z
						<linux/audit.h> */
		__u64 instruction_pointer;  /* wskaźnik instrukcji CPU - IP/EIP/RIP */
		__u64 args[6];              /* Do 6 parametrów funkcji systemowej */
	};



Flagi dla getrandom (numer 355) z linux-X.Y.Z/include/uapi/linux/random.h
nazwa wartość znaczenie
GRND_RANDOM
0x0002
Używaj /dev/random zamiast /dev/urandom
GRND_NONBLOCK
0x0001
Nie czekaj w razie braku danych



Flagi dla memfd_create (numer 356) z linux-X.Y.Z/include/uapi/linux/memfd.h
nazwa wartość znaczenie
MFD_CLOEXEC
0x0001
Ustaw FD_CLOEXEC na nowym deskryptorze
MFD_ALLOW_SEALING
0x0002
Umożliw operacje pieczętowania pliku



Operacje dla sys_bpf (numer 357) z linux-X.Y.Z/include/uapi/linux/bpf.h
nazwa wartość znaczenie
BPF_MAP_CREATE
0
Utwórz mapę i zwróć jej deskryptor
BPF_MAP_LOOKUP_ELEM
1
Wyszukaj element w mapie i zwróć jego wartość
BPF_MAP_UPDATE_ELEM
2
Utwórz lub zmień element w mapie
BPF_MAP_DELETE_ELEM
3
Wyszukaj element w mapie i usuń go
BPF_MAP_GET_NEXT_KEY
4
Wyszukaj element w mapie i pobierz kolejny klucz
BPF_PROG_LOAD
5
Sprawdź i załaduj program


Struktura bpf_attr (funkcja 357) z man 2 bpf:

	union bpf_attr {
		struct {    /* Używane w BPF_MAP_CREATE */
			__u32         map_type;
			__u32         key_size;    /* rozmiar klucza w bajtach */
			__u32         value_size;  /* rozmiar wartości w bajtach */
			__u32         max_entries; /* maksymalna liczba wpisów w mapie */
		};

		struct {    /* Używane w BPF_MAP_*_ELEM i BPF_MAP_GET_NEXT_KEY */
			__u32         map_fd;
			__aligned_u64 key;
			union {
				__aligned_u64 value;
				__aligned_u64 next_key;
			};
			__u64         flags;
		};

		struct {    /* Używane w BPF_PROG_LOAD */
			__u32         prog_type;
			__u32         insn_cnt;
			__aligned_u64 insns;      /* 'const struct bpf_insn *' */
			__aligned_u64 license;    /* 'const char *' */
			__u32         log_level;  /* Poziom logowania w weryfikacji */
			__u32         log_size;   /* rozmiar bufora użytkownika */
			__aligned_u64 log_buf;    /* bufor użytkownika 'char *' */
			__u32         kern_version;
						/* sprawdzane, gdy prog_type=kprobe
						(od Linux 4.1) */
		};
	} __attribute__((aligned(8)));




Flagi dla execveat (numer 358)
nazwa wartość znaczenie
AT_EMPTY_PATH
0x1000
Jeśli ścieżka jest pusta, uruchom plik wskazany jako katalog
AT_SYMLINK_NOFOLLOW
0x100
Nie podążaj za dowiązaniami symbolicznymi



Komendy membarrier (numer 375) z linux-X.Y.Z/include/uapi/linux/membarrier.h
nazwa wartość znaczenie
MEMBARRIER_CMD_QUERY
0
Pobierz listę obsługiwanych komend
MEMBARRIER_CMD_SHARED
1
Zsynchronizuj wątki - upewnij się, że wszystkie przeszły przez punkt, w którym wszystkie odczyty i zapisy pamięci są zgodne z kolejnością ich wykonania



Flagi dla mlock2 (numer 376) z linux-X.Y.Z/include/uapi/asm-generic/mman-common.h
nazwa wartość znaczenie
MLOCK_ONFAULT
0x01
Zablokuj strony pamięci aktualnie rezydentne i zaznacz cały obszar do zablokowania stron po ich załadowaniu po błędzie stronicowania



Flagi dla preadv2 (numer 378) z linux-X.Y.Z/include/uapi/linux/fs.h
nazwa wartość znaczenie
RWF_HIPRI
0x00000001
Operacja o wysokim priorytecie



Flagi dla fanotify_init (numer 338) z linux-X.Y.Z/include/uapi/linux/fanotify.h
nazwa wartość znaczenie
FAN_CLASS_PRE_CONTENT
0x00000008
Zdarzenia przed dostępem do obiektu
FAN_CLASS_CONTENT
0x00000004
Zdarzenia po dostępie do obiektu
FAN_CLASS_NOTIF
0x00000000
Zdarzenia w dowolnym momencie, zwiazane z dostępem do obiektu
FAN_CLOEXEC
0x00000001
Ustaw FD_CLOEXEC na zwróconym deskryptorze
FAN_NONBLOCK
0x00000002
Wyłącz blokowanie na zwróconym deskryptorze
FAN_UNLIMITED_QUEUE
0x00000010
Wyłącz limit komunikatów w kolejce
FAN_UNLIMITED_MARKS
0x00000020
Wyłącz limit znaczników w kolejce



Flagi dla fanotify_mark (numer 338) z linux-X.Y.Z/include/uapi/linux/fanotify.h
nazwa wartość znaczenie
FAN_MARK_ADD
0x00000001
Dodaj zdarzenia do maski
FAN_MARK_REMOVE
0x00000002
Usuń zdarzenia z maski
FAN_MARK_FLUSH
0x00000080
Usuń z maski zdarzenia zwiazane lub niezwiazane z montowaniem (zależy od innych parametrów)
FAN_MARK_DONT_FOLLOW
0x00000004
Nie podążaj za dowiązaniami symbolicznymi
FAN_MARK_ONLYDIR
0x00000008
Dodaj zdarzenia tylko dla katalogu
FAN_MARK_MOUNT
0x00000010
Dodaj punkt montowania i wszystkie obiekty w środku do obserwacji
FAN_MARK_IGNORED_MASK
0x00000020
Dodaj lub usuń zdarzenia z listy ignorowanych
FAN_MARK_IGNORED_SURV_MODIFY
0x00000040
Lista ignorowanych ma być zachowana, gdy następuje modyfikacja innych



Zdarzenia dla fanotify_mark (numer 338) z linux-X.Y.Z/include/uapi/linux/fanotify.h
nazwa wartość znaczenie
FAN_ACCESS
0x00000001
Stwórz zdarzenie, gdy następuje dostęp do obiektu
FAN_MODIFY
0x00000002
Stwórz zdarzenie, gdy plik zostaje zmieniony (zapisany)
FAN_CLOSE_WRITE
0x00000008
Stwórz zdarzenie, gdy zapisywalny plik zostaje zamknięty
FAN_CLOSE_NOWRITE
0x00000010
Stwórz zdarzenie, gdy plik otwarty tylko do odczytu lub katalog zostaje zamknięty
FAN_OPEN
0x00000020
Stwórz zdarzenie, gdy plik lub katalog zostaje otwarty
FAN_OPEN_PERM
0x00010000
Stwórz zdarzenie, gdy pojawia się żądanie otwarcia do pliku lub katalogu
FAN_ACCESS_PERM
0x00020000
Stwórz zdarzenie, gdy pojawia się żądanie czytania pliku lub katalogu
FAN_ONDIR
0x40000000
Stwórz odpowiednie ze zdarzeń dla katalogu
FAN_EVENT_ON_CHILD
0x08000000
Stwórz zdarzenie stworzenia obiektów bezpośrednio w danym katalogu
FAN_CLOSE
FAN_CLOSE_WRITE + FAN_CLOSE_NOWRITE
Stwórz zdarzenie, gdy obiekt otwarty w dowolnym trybie zostaje zamknięty


Struktura file_handle (funkcja 341) z man 2 name_to_handle_at:

	struct file_handle {
		unsigned int  handle_bytes;   /* rozmiar f_handle */
		int           handle_type;    /* typ uchwytu */
		unsigned char f_handle[0];    /* identyfikator pliku */
	};



Typy zasobów dla sys_kcmp (numer 338) z linux-X.Y.Z/include/uapi/linux/kcmp.h
nazwa wartość znaczenie
KCMP_FILE
0
Porównaj podane deskryptory plików
KCMP_FILES
2
Porównaj wszystkie deskryptory plików w procesach
KCMP_FS
3
Porównaj informacje o systemie plików
KCMP_IO
5
Porównaj kontekst I/O
KCMP_SIGHAND
4
Porównaj dyspozycje obsługi sygnałów
KCMP_SYSVSEM
6
Porównaj listy operacji cofania w semaforach
KCMP_VM
1
Porównaj przestrzeń adresową



Flagi dla kexec_file_load (numer 320 w x86-64) z linux-X.Y.Z/include/uapi/linux/kexec.h
nazwa wartość znaczenie
KEXEC_FILE_UNLOAD
0x00000001
Odłącz aktulanie działające jądro
KEXEC_FILE_ON_CRASH
0x00000002
Załaduj nowe jądro jako awaryjne, gdy w pierwszym wystąpi błąd
KEXEC_FILE_NO_INITRAMFS
0x00000004
Ładowanie initrd jest opcjonalne


Spis treści off-line (klawisz dostępu 1)
Spis treści on-line (klawisz dostępu 2)
Ułatwienia dla niepełnosprawnych (klawisz dostępu 0)