attributes(7)
attributes(7)
NAMN
attributes - POSIX-säkerhetskoncept
BESKRIVNING
Obs: Texten i denna man-sida är baserad på material hämtat från avsnittet "POSIX-säkerhetskoncept" i GNU C Library-manualen. Ytterligare information om ämnena som beskrivs här finns i den manualen.
Flera funktionsmanualsidor innehåller ett avsnitt ATTRIBUTES som beskriver hur säkert det är att anropa funktionen i olika sammanhang. Detta avsnitt markerar funktioner med följande säkerhetsklassificeringar:
MT-Safe
MT-Safe (trådsäkra) funktioner är säkra att kalla i närvaro av andra trådar. MT i MT-Safe står för Multi Thread.
- Att vara MT-Safe innebär inte att en funktion är atomisk eller att den använder några av de mekanismer för minnessynkronisering som POSIX tillhandahåller användare.
- Att anropa flera MT-Safe-funktioner i följd garanterar inte att kombinationen av dessa är MT-Safe. Samtidiga anrop från andra trådar kan påverka destruktivt.
- Optimeringar på hela programnivån som inline-funktioner kan exponera osäker omordning. Därför rekommenderas inte inlining över GNU C Library-gränssnittet.
MT-Unsafe
MT-Unsafe-funktioner är inte säkra att anropa i program som är multitrådade.
Villkorligt säkra funktioner
För vissa funktioner som är osäkra i vissa sammanhang finns det sätt att hantera problemen utan att helt undvika funktionen. Följande nyckelord används för att indikera dessa problem, och varje definition anger hur hela programmet behöver begränsas för att göra funktionen säker:
- init
Funktioner markerade med init utför osäker initialisering vid första anropet. Att kalla funktionen minst en gång i ett enkeltrådat läge eliminerar denna osäkerhet.
- race
Funktionen orsakar datarace vid parallell exekvering, t.ex. genom att modifiera gemensamma resurser.
- const
Modifierar interna objekt på ett icke-atomiskt sätt som bör betraktas som konstanta.
- sig
Funktionen kan tillfälligt installera en signalhanterare för interna ändamål. Detta kan störa andra signalanvändningar.
- term
Kan ändra terminalinställningar på ett sätt som orsakar förlust av ändringar från andra trådar.
Andra säkerhetsanmärkningar
Vissa nyckelord kan användas för att markera funktioner som inte är direkt osäkra men som kan behöva övervägas i vissa typer av program:
- locale
Fungerar utan synkronisering med aktuella lokala inställningar.
- env
Funktioner som åtkommer miljövariabler utan synkronisering.
- hostid
Funktioner som läser värddatorns systemidentifierare utan atomisk åtkomst.
- sigintr
Åtkomst till interna signaldata utan att garantera trådsäkerhet.
- cwd
Ändrar tillfälligt arbetskatalogen, vilket kan påverka relativ sökvägsupplösning i andra trådar.
SE ÄVEN
COLOPHON
Denna sida är en del av projektet man-pages (Linuxkärnan och C-bibliotekets gränssnittsdokumentation). Mer information finns på: kernel.org/doc/man-pages
Linux man-pages 6.9.1 — 2024-05-02 — attributes(7)
Sidor som refererar till denna sida:
- adjtimex(2)**, **clock_getres(2)**, **eventfd(2)**, **getrlimit(2)**, **getrusage(2)**, **mmap(2)**, **sigaltstack(2)**, **utimensat(2)**, **a64l(3)**, **abort(3)**, **abs(3)**, **acos(3)**, **acosh(3)**, **addseverity(3)**, **adjtime(3)**, **aio_cancel(3)**, **aio_error(3)**, **aio_fsync(3)**, **aio_read(3)**, **aio_return(3)**, **aio_suspend(3)**, **aio_write(3)**, **alloca(3)**, **arc4random(3)**, **argz_add(3)**, **asin(3)**, **asinh(3)**, **asprintf(3)**, **assert(3)**, **assert_perror(3)**, **atan2(3)**, **atan(3)**, **atanh(3)**, **atexit(3)**, **atof(3)**, **atoi(3)**, **backtrace(3)**, **basename(3)**, **bcopy(3)**, **bindresvport(3)**, **bsd_signal(3)**, **bsearch(3)**, **btowc(3)**, **byteorder(3)**, **bzero(3)**, **cabs(3)**, **cacos(3)**, **cacosh(3)**, **canonicalize_file_name(3)**, **carg(3)**, **casin(3)**, **casinh(3)**, **catan(3)**, **catanh(3)**, **catgets(3)**, **catopen(3)**, **cbrt(3)**, **ccos(3)**, **ceil(3)**, **cexp(3)**, **cfree(3)**, **cimag(3)**, **clearenv(3)**, **clock(3)**, **clock_getcpuclockid(3)**, **clog10(3)**, **clog(3)**, **closedir(3)**, **confstr(3)**, **conj(3)**, **copysign(3)**, **cos(3)**, **cosh(3)**, **cpow(3)**, **cproj(3)**, **creal(3)**, **crypt(3)**, **csin(3)**, **csinh(3)**, **csqrt(3)**, **ctan(3)**, **ctanh(3)**, **ctermid(3)**, **ctime(3)**, **daemon(3)**, **des_crypt(3)**, **difftime(3)**, **dirfd(3)**, **div(3)**, **dladdr(3)**, **dlerror(3)**, **dlinfo(3)**, **dl_iterate_phdr(3)**, **dlopen(3)**, **dlsym(3)**, **drand48(3)**, **drand48_r(3)**, **dysize(3)**, **ecvt(3)**, **ecvt_r(3)**, **encrypt(3)**, **envz_add(3)**, **erf(3)**, **erfc(3)**, **err(3)**, **error(3)**, **ether_aton(3)**, **euidaccess(3)**, **exec(3)**, **exit(3)**, **exp10(3)**, **exp2(3)**, **exp(3)**, **expm1(3)**, **fabs(3)**, **fclose(3)**, **fcloseall(3)**, **fdim(3)**, **fenv(3)**, **ferror(3)**, **fexecve(3)**, **fflush(3)**, **ffs(3)**, **fgetc(3)**, **fgetgrent(3)**, **fgetpwent(3)**, **fgetwc(3)**, **fgetws(3)**, **fileno(3)**, **finite(3)**, **flockfile(3)**, **floor(3)**, **fma(3)**, **fmax(3)**, **fmemopen(3)**, **fmin(3)**, **fmod(3)**, **fmtmsg(3)**, **fnmatch(3)**, **fopen(3)**, **fopencookie(3)**, **fpathconf(3)**, **fpclassify(3)**, **fpurge(3)**, **fputwc(3)**, **fputws(3)**, **fread(3)**, **frexp(3)**, **fseek(3)**, **fseeko(3)**, **ftime(3)**, **ftok(3)**, **fts(3)**, **ftw(3)**, **futimes(3)**, **gamma(3)**, **gcvt(3)**, **getaddrinfo(3)**, **getaddrinfo_a(3)**, **getauxval(3)**, **getcontext(3)**, **getcwd(3)**, **getdate(3)**, **getdirentries(3)**, **getdtablesize(3)**, **getenv(3)**, **getfsent(3)**, **getgrent(3)**, **getgrent_r(3)**, **getgrnam(3)**, **getgrouplist(3)**, **gethostbyname(3)**, **gethostid(3)**, **getifaddrs(3)**, **getline(3)**, **getloadavg(3)**, **getlogin(3)**, **getmntent(3)**, **getnameinfo(3)**, **getnetent(3)**, **getnetent_r(3)**, **get_nprocs(3)**, **getopt(3)**, **getpass(3)**, **getprotoent(3)**, **getprotoent_r(3)**, **getpt(3)**, **getpw(3)**, **getpwent(3)**, **getpwent_r(3)**, **getpwnam(3)**, **getrpcent(3)**, **getrpcent_r(3)**, **getrpcport(3)**, **gets(3)**, **getservent(3)**, **getservent_r(3)**, **getspnam(3)**, **getsubopt(3)**, **getttyent(3)**, **getusershell(3)**, **getutent(3)**, **getutmp(3)**, **getw(3)**, **getwchar(3)**, **glob(3)**, **gnu_get_libc_version(3)**, **grantpt(3)**, **gsignal(3)**, **hsearch(3)**, **hypot(3)**, **iconv(3)**, **iconv_close(3)**, **iconv_open(3)**, **if_nameindex(3)**, **if_nametoindex(3)**, **ilogb(3)**,
**inet(3)**, **inet_ntop(3)**, **inet_pton(3)**, **initgroups(3)**, **insque(3)**, **isalpha(3)**, **isatty(3)**, **isgreater(3)**, **iswalnum(3)**, **iswalpha(3)**, **iswblank(3)**, **iswcntrl(3)**, **iswctype(3)**, **iswdigit(3)**, **iswgraph(3)**, **iswlower(3)**, **iswprint(3)**, **iswpunct(3)**, **iswspace(3)**, **iswupper(3)**, **iswxdigit(3)**, **j0(3)**, **key_setsecret(3)**, **ldexp(3)**, **lio_listio(3)**, **localeconv(3)**, **lockf(3)**, **log10(3)**, **log1p(3)**, **log2(3)**, **log(3)**, **logb(3)**, **login(3)**, **lrint(3)**, **lround(3)**, **lsearch(3)**, **lseek64(3)**, **makecontext(3)**, **makedev(3)**, **mallinfo(3)**, **malloc(3)**, **malloc_get_state(3)**, **malloc_info(3)**, **malloc_stats(3)**, **malloc_trim(3)**, **malloc_usable_size(3)**, **matherr(3)**, **mblen(3)**, **mbrlen(3)**, **mbrtowc(3)**, **mbsinit(3)**, **mbsnrtowcs(3)**, **mbsrtowcs(3)**, **mbstowcs(3)**, **mbtowc(3)**, **mcheck(3)**, **memccpy(3)**, **memchr(3)**, **memcmp(3)**, **memcpy(3)**, **memfrob(3)**, **memmem(3)**, **memmove(3)**, **mempcpy(3)**, **memset(3)**, **mkdtemp(3)**, **mkfifo(3)**, **mkstemp(3)**, **mktemp(3)**, **modf(3)**, **mq_close(3)**, **mq_getattr(3)**, **mq_notify(3)**, **mq_open(3)**, **mq_receive(3)**, **mq_send(3)**, **mq_unlink(3)**, **mtrace(3)**, **nan(3)**, **nextafter(3)**, **nextup(3)**, **nl_langinfo(3)**, **ntp_gettime(3)**, **on_exit(3)**, **opendir(3)**, **open_memstream(3)**, **openpty(3)**, **perror(3)**, **popen(3)**, **posix_fallocate(3)**, **posix_memalign(3)**, **posix_openpt(3)**, **pow10(3)**, **pow(3)**, **__ppc_set_ppr_med(3)**, **__ppc_yield(3)**, **printf(3)**, **profil(3)**, **psignal(3)**, **pthread_attr_init(3)**, **pthread_attr_setaffinity_np(3)**, **pthread_attr_setdetachstate(3)**, **pthread_attr_setguardsize(3)**, **pthread_attr_setinheritsched(3)**, **pthread_attr_setschedparam(3)**, **pthread_attr_setschedpolicy(3)**, **pthread_attr_setscope(3)**, **pthread_attr_setsigmask_np(3)**, **pthread_attr_setstack(3)**, **pthread_attr_setstackaddr(3)**, **pthread_attr_setstacksize(3)**, **pthread_cancel(3)**, **pthread_cleanup_push(3)**, **pthread_create(3)**, **pthread_detach(3)**, **pthread_equal(3)**, **pthread_exit(3)**, **pthread_getattr_default_np(3)**, **pthread_getattr_np(3)**, **pthread_getcpuclockid(3)**, **pthread_join(3)**, **pthread_kill(3)**, **pthread_kill_other_threads_np(3)**, **pthread_self(3)**, **pthread_setaffinity_np(3)**, **pthread_setcancelstate(3)**, **pthread_setconcurrency(3)**, **pthread_setname_np(3)**, **pthread_setschedparam(3)**, **pthread_setschedprio(3)**, **pthread_sigmask(3)**, **pthread_sigqueue(3)**, **pthread_testcancel(3)**, **pthread_tryjoin_np(3)**, **pthread_yield(3)**, **ptsname(3)**, **putenv(3)**, **putgrent(3)**, **putpwent(3)**, **puts(3)**, **putwchar(3)**, **qecvt(3)**, **qsort(3)**, **raise(3)**, **rand(3)**, **random(3)**, **random_r(3)**, **rcmd(3)**, **readdir(3)**, **readdir_r(3)**, **realpath(3)**, **re_comp(3)**, **regex(3)**, **remainder(3)**, **remove(3)**, **remquo(3)**, **resolver(3)**, **rewinddir(3)**, **rexec(3)**, **rint(3)**, **round(3)**, **rpc(3)**, **rpmatch(3)**, **rtime(3)**, **scalb(3)**, **scalbln(3)**, **scandir(3)**, **scanf(3)**, **sched_getcpu(3)**, **seekdir(3)**, **sem_close(3)**, **sem_destroy(3)**, **sem_getvalue(3)**, **sem_init(3)**, **sem_open(3)**, **sem_post(3)**, **sem_unlink(3)**, **sem_wait(3)**, **setaliasent(3)**, **setbuf(3)**, **setenv(3)**, **setjmp(3)**, **setlocale(3)**, **setlogmask(3)**, **setnetgrent(3)**, **shm_open(3)**, **siginterrupt(3)**, **signbit(3)**, **significand(3)**, **sigpause(3)**, **sigqueue(3)**, **sigset(3)**, **sigsetops(3)**, **sigvec(3)**, **sigwait(3)**, **sin(3)**, **sincos(3)**, **sinh(3)**, **sleep(3)**, **sockatmark(3)**, **sqrt(3)**, **sscanf(3)**, **statvfs(3)**, **stdarg(3)**, **stdio_ext(3)**, **stpncpy(3)**, **strcasecmp(3)**, **strchr(3)**, **strcmp(3)**, **strcoll(3)**, **strcpy(3)**, **strdup(3)**, **strerror(3)**, **
strfmon(3)**, **strfromd(3)**, **strfry(3)**, **strftime(3)**, **strlen(3)**, **strncat(3)**, **strnlen(3)**, **strpbrk(3)**, **strptime(3)**, **strsep(3)**, **strsignal(3)**, **strspn(3)**, **strstr(3)**, **strtod(3)**, **strtoimax(3)**, **strtok(3)**, **strtol(3)**, **strtoul(3)**, **strverscmp(3)**, **strxfrm(3)**, **swab(3)**, **sysconf(3)**, **syslog(3)**, **system(3)**, **sysv_signal(3)**, **tan(3)**, **tanh(3)**, **tcgetpgrp(3)**, **tcgetsid(3)**, **telldir(3)**, **tempnam(3)**, **termios(3)**, **tgamma(3)**, **timegm(3)**, **tmpfile(3)**, **tmpnam(3)**, **toascii(3)**, **toupper(3)**, **towctrans(3)**, **towlower(3)**, **towupper(3)**, **trunc(3)**, **tsearch(3)**, **ttyname(3)**, **ttyslot(3)**, **tzset(3)**, **ualarm(3)**, **ulimit(3)**, **ungetwc(3)**, **unlocked_stdio(3)**, **unlockpt(3)**, **updwtmp(3)**, **usleep(3)**, **wcpcpy(3)**, **wcpncpy(3)**, **wcrtomb(3)**, **wcscasecmp(3)**, **wcscat(3)**, **wcschr(3)**, **wcscmp(3)**, **wcscpy(3)**, **wcscspn(3)**, **wcsdup(3)**, **wcslen(3)**, **wcsncasecmp(3)**, **wcsncat(3)**, **wcsncmp(3)**, **wcsncpy(3)**, **wcsnlen(3)**, **wcsnrtombs(3)**, **wcspbrk(3)**, **wcsrchr(3)**, **wcsrtombs(3)**, **wcsspn(3)**, **wcsstr(3)**, **wcstoimax(3)**, **wcstok(3)**, **wcstombs(3)**, **wcswidth(3)**, **wctob(3)**, **wctomb(3)**, **wctrans(3)**, **wctype(3)**, **wcwidth(3)**, **wmemchr(3)**, **wmemcmp(3)**, **wmemcpy(3)**, **wmemmove(3)**, **wmemset(3)**, **wordexp(3)**, **wprintf(3)**, **xcrypt(3)**, **xdr(3)**, **y0(3)**, **man-pages(7)**, **pthreads(7)**, **standards(7)**