sysconf - pobieranie informacje o konfiguracji w trakcie
uruchomienia
#include <unistd.h>
long sysconf(int name);
POSIX pozwala testować w czasie kompilowania aplikacji lub
w czasie jej działania, czy pewne opcje są wspierane lub jakie
są wartości pewnych konfigurowalnych stałych lub
limitów.
W czasie kompilacji jest to robione przez zainkludowanie
<unistd.h> lub <limits.h> i testowanie
wartości pewnych makr.
W czasie działania programu, można odpytać o
wartości liczbowe, używając opisywanej tutaj funkcji
sysconf(). Wartości liczbowe dotyczące systemu
plików, w którym jest umieszczony dany plik, można
uzyskać, wywołując funkcje fpathconf(3) i
pathconf(3). Wartości będące
łańcuchami znaków zwraca funkcja confstr(3).
Wartości zwracane przez powyższe funkcje są
stałymi dotyczącymi konfiguracji systemu, które nie
zmienią się przez cały czas życia procesu.
Dla opcji zazwyczaj istnieje stała
_POSIX_COŚ, która może być zdefiniowana w
<unistd.h>. Jeżeli nie jest zdefiniowana, można
uzyskać jej wartość w czasie działania programu.
Jeżeli wartością jest -1, to dana opcja nie jest
wspierana w systemie. Wartość 0 oznacza, że
istnieją odpowiednie funkcje i pliki nagłówkowe, ale
należy sprawdzić w czasie działania, w jakim stopniu
dana opcja jest wspierana. Wartość inna niż -1 i 0
oznacza, że dana opcja jest wspierana. Zazwyczaj wartości
(takie jak 200112L) oznaczają rok i miesiąc rewizji standardu
POSIX opisującej tę opcję. Dopóki odpowiedni
standard POSIX opisujący opcję nie zostanie opublikowany,
glibc używa wartości 1, aby zasygnalizować, że
opcja jest wspierana. Odpowiednim argumentem funkcji sysconf()
będzie _SC_COŚ. Listę opcji można
znaleźć w posixoptions(7).
Dla zmiennych lub limitów zazwyczaj istnieje stała
_COŚ definiowana w <limits.h> lub
_POSIX_COŚ definiowana w <unistd.h>. Stała
nie będzie zdefiniowana, jeżeli limit nie jest
określony. Jeżeli stała jest zdefiniowana, to
określa gwarantowany limit, ale w rzeczywistości może
być wspierana wartość większa niż wynosi
wartość tej stałej. Jeśli aplikacja chce
zrobić użytek ze zmiennych, których wartości
mogą się różnić w
zależności od systemu, może wywołać
funkcję sysconf(). Argumentem funkcji sysconf()
będzie _SC_COŚ.
W tabeli poniżej podajemy nazwę zmiennej,
nazwę argumentu funkcji sysconf(), używanego do
odpytania o jej wartość, oraz krótki opis.
Najpierw wartości zgodne z POSIX.1.
- ARG_MAX -
_SC_ARG_MAX
- Maksymalna długość argumentów funkcji z
rodziny exec(3). Nie może być mniejsza niż
_POSIX_ARG_MAX (4096).
- CHILD_MAX -
_SC_CHILD_MAX
- Maksymalna liczba równoczesnych procesów jednego
użytkownika. Nie może być mniejsza niż
_POSIX_CHILD_MAX (25).
- HOST_NAME_MAX
- _SC_HOST_NAME_MAX
- Maksymalna długość nazwy komputera, pomijając
końcowy bajt NULL, zwracana przez gethostname(2). Nie
może być mniejsza niż _POSIX_HOST_NAME_MAX
(255).
- LOGIN_NAME_MAX
- _SC_LOGIN_NAME_MAX
- Maksymalna długość nazwy użytkownika,
łącznie z końcowym znakiem NULL. Nie może
być mniejsza niż _POSIX_LOGIN_NAME_MAX (9).
- NGROUPS_MAX
- _SC_NGROUPS_MAX
- Maksymalna liczba identyfikatorów dodatkowych grup.
- tyknięcia zegara -
_SC_CLK_TCK
- Liczba tyknięć zegara na sekundę.
Odpowiadająca jej zmienna jest przestarzała, a była
oczywiście nazwana CLK_TCK. (Uwaga: makro
CLOCKS_PER_SEC nie dostarcza informacji: jego wartość
musi być równa 1000000).
- OPEN_MAX -
_SC_OPEN_MAX
- Maksymalna liczba plików, które proces może
mieć otwarte w dowolnym czasie. Nie może być mniejsza
niż _POSIX_OPEN_MAX (20).
- PAGESIZE -
_SC_PAGESIZE
- Rozmiar strony w bajtach. Nie może być mniejszy niż
1. (Niektóre systemy używają zamiast tego
PAGE_SIZE).
- RE_DUP_MAX
- _SC_RE_DUP_MAX
- Liczba powtórzonych wystąpień BRE dopuszczalnych w
regexec(3) i regcomp(3). Nie może być mniejsza
niż _POSIX2_RE_DUP_MAX (255).
- STREAM_MAX
- _SC_STREAM_MAX
- Maksymalna liczba strumieni, którą proces może
otworzyć w dowolnym czasie. Jeśli jest zdefiniowana, to ma
taką samą wartość jak standardowe makro
FOPEN_MAX w C. Nie może być mniejsza niż
_POSIX_STREAM_MAX (8).
- SYMLOOP_MAX
- _SC_SYMLOOP_MAX
- Maksymalna liczba dowiązań symbolicznych w
ścieżce nie powodująca zwrócenia
błędu ELOOP. Nie może być mniejsza
niż _POSIX_SYMLOOP_MAX (8).
- TTY_NAME_MAX
- _SC_TTY_NAME_MAX
- Maksymalna długość nazwy urządzenia
terminalowego, włączając końcowy znak NULL.
Nie może być mniejsza niż _POSIX_TTY_NAME_MAX
(9).
- TZNAME_MAX
- _SC_TZNAME_MAX
- Maksymalna liczba bajtów w nazwie strefy czasowej. Nie może
być mniejsza niż _POSIX_TZNAME_MAX (6).
- _POSIX_VERSION - _SC_VERSION
- Określa rok i miesiąc, w formacie YYYYMML, w
którym został zaakceptowany standard POSIX.1. Na
przykład wartość 199009L oznacza wersję
standardu z września 1990 roku.
Następnie podajemy wartości POSIX.2
określające limity dla programów użytkowych.
- BC_BASE_MAX
- _SC_BC_BASE_MAX
- Określa maksymalną wartość obase
akceptowaną przez program użytkowy bc(1).
- BC_DIM_MAX
- _SC_BC_DIM_MAX
- Określa maksymalną dopuszczalną liczbę
elementów w tabelach w programie bc(1).
- BC_SCALE_MAX
- _SC_BC_SCALE_MAX
- Określa maksymalną wartość scale
akceptowaną przez program użytkowy bc(1).
- BC_STRING_MAX
- _SC_BC_STRING_MAX
- Określa maksymalną długość
łańcucha znaków akceptowanego przez
bc(1).
- COLL_WEIGHTS_MAX
- _SC_COLL_WEIGHTS_MAX
- Określa maksymalną liczbę wag, które
można przypisać do wpisu słowa kluczowego
LC_COLLATE order w pliku definicji ustawień
regionalnych.
- EXPR_NEST_MAX
- _SC_EXPR_NEST_MAX
- Określa maksymalną liczbę wyrażeń
zagnieżdżonych w nawiasach, akceptowaną przez program
expr(1).
- LINE_MAX -
_SC_LINE_MAX
- Maksymalna długość linii wejściowej
(łącznie ze znakiem końca linii) programu
użytkowego pochodzącej albo ze standardowego wejścia,
albo z pliku.
- RE_DUP_MAX
- _SC_RE_DUP_MAX
- Maksymalna liczna powtórzonych wystąpień
wyrażenia regularnego, jeżeli jest używana notacja
\{m,n\}.
- POSIX2_VERSION
- _SC_2_VERSION
- Określa wersję standardu POSIX.2 w formacie YYYYMML.
- POSIX2_C_DEV
- _SC_2_C_DEV
- Określa, czy są wspierane użytki zgodne z POSIX.2
służące do rozwijania oprogramowania w języku
C.
- POSIX2_FORT_DEV
- _SC_2_FORT_DEV
- Określa, czy są wspierane użytki zgodne z POSIX.2
służące do rozwijania oprogramowania w
Fortranie.
- POSIX2_FORT_RUN
- _SC_2_FORT_RUN
- Określa, czy są wspierane programy użytkowe POSIX.2,
służące do uruchamia programów w
Fortranie.
- _POSIX2_LOCALEDEF - _SC_2_LOCALEDEF
- Określa, czy jest wspierane tworzenie ustawień regionalnych
POSIX.2 przez localedef(1) .
- POSIX2_SW_DEV
- _SC_2_SW_DEV
- Określa, czy są wspierane użytki zgodne z POSIX.2
służące do rozwijania oprogramowania.
Poniższe wartości także istnieją, ale
może nie być ich w standardzie.
-
- _SC_PHYS_PAGES
- Liczba stron pamięci fizycznej. Proszę
zauważyć, że nie jest możliwe, aby iloczyn tej
wartości z _SC_PAGESIZE przekroczył (overflow)
dopuszczalny zakres wartości liczbowych.
-
- _SC_AVPHYS_PAGES
- Liczba obecnie dostępnych stron fizycznej pamięci.
-
- _SC_NPROCESSORS_CONF
- Liczba skonfigurowanych procesorów.
-
- _SC_NPROCESSORS_ONLN
- Liczba obecnie dostępnych procesorów.
Jeżeli argument name jest niepoprawny, to zwracane
jest -1, a errno jest ustawiane na EINVAL. W przeciwnym
wypadku wartością zwracaną jest wartość
zasobu systemowego, a wartość errno nie jest zmieniana.
W przypadku opcji zwracana jest wartość dodatnia, jeśli
opcja jest dostępna, a -1, jeśli nie jest. W przypadku
limitów -1 oznacza, że limit nie został
określony.
Informacje o pojęciach używanych w tym rozdziale
można znaleźć w podręczniku
attributes(7).
Interfejs |
Atrybut |
Wartość |
sysconf() |
Bezpieczeństwo wątkowe |
MT-Safe env |
POSIX.1-2001, POSIX.1-2008.
Użycie ARG_MAX jest skomplikowane, ponieważ
nie jest określone, jak dużo przestrzeni argumentów
funkcji exec(3) jest zabierane przez zmienne środowiskowe
użytkownika.
Niektóre zwracane wartości mogą być
duże; nie są one odpowiednie do przydzielania
pamięci.
Angielska wersja tej strony pochodzi z wydania 4.07 projektu Linux
man-pages. Opis projektu, informacje dotyczące
zgłaszania błędów oraz najnowszą
wersję oryginału można znaleźć pod
adresem https://www.kernel.org/doc/man-pages/.
Autorami polskiego tłumaczenia niniejszej strony
podręcznika man są: Robert Luberda <robert@debian.org> i
Michał Kułach <michal.kulach@gmail.com>.
Polskie tłumaczenie jest częścią
projektu manpages-pl; uwagi, pomoc, zgłaszanie
błędów na stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją
4.07 oryginału.