Man page - userfaultfd(2)
Packages contains this manual
- __malloc_initialize_hook(3)
- getpwuid(3)
- frexpl(3)
- fchown(2)
- setttyent(3)
- pthread_attr_setstacksize(3)
- calloc(3)
- clog(3)
- seteuid(2)
- res_nquerydomain(3)
- y0l(3)
- catanl(3)
- catanh(3)
- inet_addr(3)
- getcwd(2)
- epoll_create1(2)
- atol(3)
- pciconfig_write(2)
- htonl(3)
- timer_settime(2)
- munmap(2)
- cexpl(3)
- rt_sigsuspend(2)
- msgctl(2)
- tan(3)
- get_mempolicy(2)
- roundf(3)
- towctrans(3)
- xdr_opaque(3)
- psignal(3)
- error_at_line(3)
- xdrmem_create(3)
- select(2)
- getdate_r(3)
- getprotobyname_r(3)
- nrand48_r(3)
- inet_netof(3)
- inet_ntoa(3)
- nextafterl(3)
- innetgr(3)
- on_exit(3)
- expm1l(3)
- strfmon(3)
- strdup(3)
- getservbyport(3)
- arch_prctl(2)
- j0(3)
- wait4(2)
- personality(2)
- bpf(2)
- pvalloc(3)
- getresuid32(2)
- des_setparity(3)
- prctl(2)
- clog10(3)
- aio_init(3)
- pthread_getconcurrency(3)
- csinl(3)
- linkat(2)
- vsscanf(3)
- isascii(3)
- xdr_union(3)
- nan(3)
- utimensat(2)
- ioctl_vt(2)
- _newselect(2)
- ldexpl(3)
- fabsf(3)
- chown(2)
- mkstemps(3)
- pthread_attr_getstacksize(3)
- listxattr(2)
- getpgrp(2)
- xdr_short(3)
- tcflush(3)
- pthread_cond_wait(3)
- argz_add(3)
- wcpncpy(3)
- reallocarray(3)
- llrintf(3)
- outsl(2)
- qsort(3)
- authnone_create(3)
- tzname(3)
- setresuid32(2)
- isspace(3)
- open_by_handle_at(2)
- drem(3)
- conjf(3)
- nanosleep(2)
- pthread_kill(3)
- putc(3)
- pthread_condattr_destroy(3)
- getpwuid_r(3)
- strverscmp(3)
- res_init(3)
- cacosl(3)
- qecvt_r(3)
- iswgraph(3)
- gethostbyname(3)
- ntohl(3)
- acct(2)
- asinl(3)
- envz_merge(3)
- strdupa(3)
- idle(2)
- getopt_long_only(3)
- hstrerror(3)
- fanotify_init(2)
- fputs_unlocked(3)
- sleep(3)
- vfprintf(3)
- scalb(3)
- nanl(3)
- lchown32(2)
- getnetent_r(3)
- fcntl(2)
- inw(2)
- rintl(3)
- arc4random(3)
- getsockopt(2)
- ilogbl(3)
- clog2(3)
- encrypt(3)
- sqrtf(3)
- isspace_l(3)
- tanl(3)
- cfmakeraw(3)
- assert(3)
- strtoull(3)
- xdrstdio_create(3)
- optopt(3)
- setrlimit(2)
- lround(3)
- xdr_accepted_reply(3)
- fmin(3)
- mq_notify(3)
- svcerr_auth(3)
- sbrk(2)
- recv(2)
- mq_unlink(2)
- strxfrm(3)
- ctan(3)
- atoi(3)
- xcrypt(3)
- sgetspent(3)
- fread(3)
- isless(3)
- ceil(3)
- pthread_cond_broadcast(3)
- oldfstat(2)
- outl(2)
- times(2)
- wcslen(3)
- popen(3)
- wprintf(3)
- labs(3)
- getrpcbynumber(3)
- shmat(2)
- clock_gettime(2)
- btree(3)
- s390_sthyi(2)
- siggetmask(3)
- getgid32(2)
- puts(3)
- scalblnl(3)
- strpbrk(3)
- catanhl(3)
- vlimit(3)
- getrpcent(3)
- tgammal(3)
- strtoll(3)
- funlockfile(3)
- xdecrypt(3)
- pthread_key_delete(3)
- setgrent(3)
- wmemmove(3)
- gnu_dev_major(3)
- regexec(3)
- lrintl(3)
- __ppc_set_ppr_med(3)
- rmdir(2)
- io_getevents(2)
- request_key(2)
- ecvt(3)
- __ppc_mdoom(3)
- mktemp(3)
- key_gendes(3)
- le64toh(3)
- statvfs(3)
- rpc(3)
- getdate_err(3)
- munlockall(2)
- close(2)
- xdr_rejected_reply(3)
- dlerror(3)
- le32toh(3)
- feclearexcept(3)
- insque(3)
- clntraw_create(3)
- getutid(3)
- strtof(3)
- settimeofday(2)
- mkdir(2)
- rewind(3)
- logf(3)
- tmpnam(3)
- iswpunct(3)
- wcrtomb(3)
- epoll_pwait(2)
- getitimer(2)
- wordexp(3)
- clog2f(3)
- capset(2)
- strrchr(3)
- outsb(2)
- freeifaddrs(3)
- getwc_unlocked(3)
- ustat(2)
- bswap_16(3)
- program_invocation_short_name(3)
- ldiv(3)
- exp10f(3)
- vprintf(3)
- wcsncpy(3)
- iscntrl(3)
- readlink(2)
- semget(2)
- connect(2)
- psiginfo(3)
- epoll_ctl(2)
- removexattr(2)
- envz_strip(3)
- fgetxattr(2)
- atexit(3)
- putgrent(3)
- bswap(3)
- getegid32(2)
- qecvt(3)
- asinh(3)
- isfdtype(3)
- setenv(3)
- readdir(3)
- rtime(3)
- nearbyint(3)
- getgroups32(2)
- statx(2)
- modify_ldt(2)
- cpow(3)
- eventfd_read(3)
- sendfile64(2)
- getnetbyname(3)
- fremovexattr(2)
- uselib(2)
- inet(3)
- endutxent(3)
- clnt_spcreateerror(3)
- pututline(3)
- nexttowardl(3)
- getipnodebyaddr(3)
- fts_set(3)
- memmem(3)
- fmodl(3)
- setfsuid32(2)
- wordfree(3)
- fadvise64(2)
- getppid(2)
- qsort_r(3)
- toupper(3)
- getwc(3)
- fputws(3)
- mrand48(3)
- preadv(2)
- sincosf(3)
- fstatat64(2)
- dirfd(3)
- jnf(3)
- static_assert(3)
- wctype(3)
- vwarn(3)
- setfsent(3)
- listen(2)
- wcstok(3)
- argz_insert(3)
- select_tut(2)
- ctanl(3)
- getunwind(2)
- difftime(3)
- daylight(3)
- sigpause(3)
- wcscat(3)
- dlclose(3)
- __ppc_set_ppr_med_low(3)
- pread(2)
- fstatvfs(3)
- cbrtf(3)
- strnlen(3)
- sinhl(3)
- inl_p(2)
- setregid32(2)
- putwc(3)
- register_printf_type(3)
- nextafterf(3)
- opendir(3)
- strtod(3)
- tgamma(3)
- malloc_get_state(3)
- aio_write(3)
- timezone(3)
- xdr_pmaplist(3)
- sysfs(2)
- index(3)
- svcerr_noproc(3)
- envz(3)
- klogctl(3)
- pselect(2)
- get_current_dir_name(3)
- xdr_char(3)
- asinhf(3)
- preadv2(2)
- inotify_init1(2)
- pthread_attr_setstackaddr(3)
- getline(3)
- tanhf(3)
- rtnetlink(3)
- pkey_alloc(2)
- edata(3)
- stailq(3)
- isastream(2)
- setregid(2)
- copy_file_range(2)
- rcmd_af(3)
- futex(2)
- prof(2)
- siglongjmp(3)
- hdestroy(3)
- catan(3)
- pthread_cond_signal(3)
- mkfifoat(3)
- clntudp_create(3)
- getentropy(3)
- vsprintf(3)
- fabs(3)
- lseek64(3)
- pthread_setname_np(3)
- conjl(3)
- chroot(2)
- ccoshf(3)
- erand48_r(3)
- wcsnrtombs(3)
- rindex(3)
- fputc_unlocked(3)
- setresgid32(2)
- gettimeofday(2)
- cexp(3)
- inotify_add_watch(2)
- set_robust_list(2)
- nice(2)
- strtold(3)
- mq_getattr(3)
- xdr(3)
- getxattr(2)
- getrandom(2)
- splice(2)
- strerror(3)
- fcntl64(2)
- fnmatch(3)
- ungetwc(3)
- getspnam_r(3)
- clearenv(3)
- atan2(3)
- get_myaddress(3)
- open(2)
- pthread_setcancelstate(3)
- newlocale(3)
- open_memstream(3)
- setprotoent(3)
- logbf(3)
- ilogb(3)
- wmemcpy(3)
- tcsendbreak(3)
- be16toh(3)
- perfmonctl(2)
- strtoq(3)
- getgrgid_r(3)
- pthread_timedjoin_np(3)
- memfd_create(2)
- getttynam(3)
- mcheck_pedantic(3)
- _llseek(2)
- renameat2(2)
- ioperm(2)
- ecb_crypt(3)
- pthread_condattr_init(3)
- fminl(3)
- lio_listio(3)
- envz_add(3)
- setbuf(3)
- setkey(3)
- expm1(3)
- strtoul(3)
- getcwd(3)
- setutxent(3)
- getrpcent_r(3)
- unimplemented(2)
- fclose(3)
- epoll_create(2)
- getfsent(3)
- key_secretkey_is_set(3)
- vserver(2)
- vswprintf(3)
- sigsuspend(2)
- pututxline(3)
- clnt_freeres(3)
- cacheflush(2)
- ioprio_set(2)
- alarm(2)
- fgetc(3)
- __fpurge(3)
- getlogin_r(3)
- vfork(2)
- bstring(3)
- div(3)
- getrusage(2)
- gettid(2)
- dprintf(3)
- strtoumax(3)
- jrand48(3)
- iswcntrl(3)
- vwarnx(3)
- cacos(3)
- ccoshl(3)
- fesetexceptflag(3)
- res_nclose(3)
- shmop(2)
- mcheck_check_all(3)
- vscanf(3)
- tolower(3)
- landlock_add_rule(2)
- argz_next(3)
- lroundl(3)
- ruserok(3)
- glob(3)
- brk(2)
- rename(2)
- strcspn(3)
- sched_getscheduler(2)
- wcstoumax(3)
- dbopen(3)
- xdr_bytes(3)
- fegetenv(3)
- scalbf(3)
- pkey_free(2)
- fgetgrent(3)
- strchrnul(3)
- fork(2)
- log1pf(3)
- strtoimax(3)
- fputs(3)
- putspent(3)
- ttyname_r(3)
- iswlower(3)
- epoll_wait(2)
- minor(3)
- wcsspn(3)
- sendmmsg(2)
- pthread_attr_getsigmask_np(3)
- erand48(3)
- setpgrp(2)
- db(3)
- readv(2)
- cimagf(3)
- pthread_sigmask(3)
- getresuid(2)
- gamma(3)
- logwtmp(3)
- imaxabs(3)
- y1(3)
- swapoff(2)
- svcerr_weakauth(3)
- mbtowc(3)
- madvise(2)
- __fbufsize(3)
- swapon(2)
- towlower(3)
- asin(3)
- initgroups(3)
- svc_getreqset(3)
- pthread_attr_destroy(3)
- scalblnf(3)
- ispunct(3)
- casin(3)
- xdr_pmap(3)
- sigvec(3)
- dlmopen(3)
- localeconv(3)
- tcgetattr(3)
- mempcpy(3)
- clnt_perrno(3)
- clock_getcpuclockid(3)
- setaliasent(3)
- clock(3)
- ftok(3)
- svc_run(3)
- getsubopt(3)
- coshf(3)
- pow(3)
- getpwent(3)
- ntp_gettime(3)
- xdrrec_skiprecord(3)
- symlink(2)
- shmctl(2)
- mq_timedreceive(2)
- malloc(3)
- tgkill(2)
- l64a(3)
- unlockpt(3)
- mallopt(3)
- creal(3)
- syscalls(2)
- set_tid_address(2)
- exp2f(3)
- fstatfs(2)
- statfs(2)
- dreml(3)
- feenableexcept(3)
- ftw(3)
- fanotify_mark(2)
- clnt_sperror(3)
- realpath(3)
- sysconf(3)
- _syscall(2)
- set_mempolicy(2)
- mq_unlink(3)
- freehostent(3)
- rresvport_af(3)
- nl_langinfo_l(3)
- fmaxl(3)
- iscntrl_l(3)
- copysignf(3)
- llseek(2)
- bzero(3)
- ioctl_fsmap(2)
- remquof(3)
- malloc_trim(3)
- pthread_getattr_default_np(3)
- isalnum_l(3)
- mlock(2)
- nearbyintf(3)
- confstr(3)
- sinf(3)
- ioctl_eventpoll(2)
- sigstack(3)
- seed48_r(3)
- utmpname(3)
- malloc_stats(3)
- stpncpy(3)
- getservbyport_r(3)
- cabsl(3)
- isblank(3)
- sigprocmask(2)
- isinfl(3)
- isinff(3)
- pathconf(3)
- xdr_u_short(3)
- acos(3)
- timerfd_create(2)
- key_encryptsession(3)
- log2f(3)
- oldlstat(2)
- res_querydomain(3)
- memcmp(3)
- gethostbyaddr(3)
- sighold(3)
- gtty(2)
- xdr_void(3)
- getmsg(2)
- io_setup(2)
- ttyslot(3)
- recno(3)
- cuserid(3)
- nanf(3)
- pthread_getaffinity_np(3)
- if_indextoname(3)
- remainderf(3)
- putpwent(3)
- pow10f(3)
- pwritev(2)
- swapcontext(3)
- cfsetospeed(3)
- envz_remove(3)
- cosh(3)
- a64l(3)
- uselocale(3)
- yn(3)
- msgget(2)
- pthread_equal(3)
- prlimit(2)
- setspent(3)
- newfstatat(2)
- renameat(2)
- truncf(3)
- pthread_yield(3)
- tkill(2)
- islessequal(3)
- isnanf(3)
- sethostent(3)
- setvbuf(3)
- gnu_get_libc_release(3)
- atoll(3)
- getgrnam(3)
- get_robust_list(2)
- __ppc_yield(3)
- __memalign_hook(3)
- eventfd2(2)
- mq_setattr(3)
- tmpnam_r(3)
- pmap_getport(3)
- svcfd_create(3)
- getfsspec(3)
- setgid(2)
- getlogin(3)
- get_nprocs(3)
- canonicalize_file_name(3)
- pthread_mutexattr_getrobust(3)
- strerrorname_np(3)
- csinh(3)
- malloc_set_state(3)
- tcgetsid(3)
- ssignal(3)
- secure_getenv(3)
- significandl(3)
- wcschr(3)
- isgraph(3)
- pthread_mutexattr_gettype(3)
- creat(2)
- cabsf(3)
- __ppc_set_ppr_med_high(3)
- fchdir(2)
- backtrace_symbols(3)
- exp10l(3)
- euidaccess(3)
- sync_file_range(2)
- getutxline(3)
- isdigit(3)
- sinhf(3)
- lgetxattr(2)
- getaliasent(3)
- memrchr(3)
- io_submit(2)
- clnt_create(3)
- __setfpucw(3)
- _flushlbf(3)
- lcong48_r(3)
- clog10l(3)
- pmap_getmaps(3)
- memalign(3)
- xdr_authunix_parms(3)
- execl(3)
- getdate(3)
- cfsetispeed(3)
- tanhl(3)
- wmempcpy(3)
- outw_p(2)
- faccessat(2)
- rresvport(3)
- nextup(3)
- fgetgrent_r(3)
- getopt(3)
- xdr_vector(3)
- aio_error(3)
- frexpf(3)
- getpw(3)
- sscanf(3)
- mprotect(2)
- exp(3)
- sched_getaffinity(2)
- accept4(2)
- remainderl(3)
- pthread_key_create(3)
- endian(3)
- setmntent(3)
- get_phys_pages(3)
- argz(3)
- _exit(2)
- towupper_l(3)
- lrand48(3)
- csqrt(3)
- hdestroy_r(3)
- remquo(3)
- feof_unlocked(3)
- isprint(3)
- pivot_root(2)
- arc4random_uniform(3)
- strfroml(3)
- getdomainname(2)
- va_end(3)
- getresgid(2)
- cosf(3)
- endhostent(3)
- setgid32(2)
- ioctl_fs(2)
- getaddrinfo(3)
- fgetwc(3)
- lock(2)
- getservbyname_r(3)
- sys_nerr(3)
- insb(2)
- usleep(3)
- security(2)
- cfree(3)
- tanf(3)
- fprintf(3)
- pthread_mutexattr_setpshared(3)
- xprt_unregister(3)
- alphasort(3)
- getgrent(3)
- scandirat(3)
- iruserok(3)
- ttyname(3)
- tdestroy(3)
- strcasecmp(3)
- getpgid(2)
- drand48_r(3)
- mmap(2)
- sigtimedwait(2)
- pthread_once(3)
- mq_receive(3)
- pthread_mutexattr_setkind_np(3)
- iopl(2)
- s390_runtime_instr(2)
- lckpwdf(3)
- memmove(3)
- __fpending(3)
- mbsrtowcs(3)
- restart_syscall(2)
- memset(3)
- significandf(3)
- openat2(2)
- timeradd(3)
- conj(3)
- flockfile(3)
- madvise1(2)
- inet_aton(3)
- fstatfs64(2)
- fmax(3)
- fmemopen(3)
- fmaf(3)
- lseek(2)
- registerrpc(3)
- kexec_file_load(2)
- gammal(3)
- feof(3)
- pidfd_open(2)
- crealf(3)
- clogl(3)
- getutmp(3)
- umount(2)
- inet_pton(3)
- flistxattr(2)
- xdr_wrapstring(3)
- socketcall(2)
- setrpcent(3)
- rint(3)
- vm86(2)
- sincosl(3)
- getprotoent_r(3)
- mknod(2)
- getdents64(2)
- gai_cancel(3)
- srandom_r(3)
- getnetbyname_r(3)
- sigaddset(3)
- htole16(3)
- endnetent(3)
- nextafter(3)
- timerisset(3)
- getgrent_r(3)
- freeaddrinfo(3)
- endprotoent(3)
- mbind(2)
- sigorset(3)
- pthread_rwlockattr_setkind_np(3)
- cimag(3)
- waitid(2)
- abs(3)
- unlink(2)
- recvmsg(2)
- getaliasbyname(3)
- wctrans(3)
- kill(2)
- strtol(3)
- __ppc_set_ppr_very_low(3)
- membarrier(2)
- getnetbyaddr_r(3)
- writev(2)
- errx(3)
- tfind(3)
- clone3(2)
- __freading(3)
- outw(2)
- regfree(3)
- accept(2)
- timer_getoverrun(2)
- shmdt(2)
- svcerr_decode(3)
- getnameinfo(3)
- endusershell(3)
- execvpe(3)
- cbc_crypt(3)
- res_send(3)
- xdr_destroy(3)
- getcontext(3)
- pkey_mprotect(2)
- twalk_r(3)
- isalnum(3)
- timercmp(3)
- setxattr(2)
- pthread_cleanup_pop_restore_np(3)
- stat(2)
- isupper(3)
- vsyslog(3)
- strlen(3)
- pthread_attr_setinheritsched(3)
- xdr_inline(3)
- strtouq(3)
- raise(3)
- getpeername(2)
- capget(2)
- atanl(3)
- ferror_unlocked(3)
- isxdigit_l(3)
- modfl(3)
- pthread_mutexattr_init(3)
- pthread_mutexattr_getkind_np(3)
- phys(2)
- llabs(3)
- sched_rr_get_interval(2)
- asprintf(3)
- explicit_bzero(3)
- asctime(3)
- clone(2)
- munlock(2)
- __realloc_hook(3)
- atof(3)
- rt_tgsigqueueinfo(2)
- syslog(2)
- inet_makeaddr(3)
- epoll_pwait2(2)
- iswalpha(3)
- netlink(3)
- sched_setattr(2)
- sigdescr_np(3)
- access(2)
- getc_unlocked(3)
- dysize(3)
- inet_net_pton(3)
- sched_setparam(2)
- timerfd_settime(2)
- nexttowardf(3)
- expf(3)
- svcerr_progvers(3)
- getwchar(3)
- ftime(3)
- if_nametoindex(3)
- argz_add_sep(3)
- vasprintf(3)
- unlinkat(2)
- putenv(3)
- pthread_mutexattr_setrobust_np(3)
- error_message_count(3)
- setfsgid(2)
- cmsg(3)
- setpwent(3)
- cfgetospeed(3)
- end(3)
- pidfd_send_signal(2)
- scalbn(3)
- closelog(3)
- srandom(3)
- argz_replace(3)
- ioctl_tty(2)
- va_arg(3)
- towlower_l(3)
- isblank_l(3)
- remove(3)
- expl(3)
- fscanf(3)
- versionsort(3)
- pow10(3)
- hsearch(3)
- gethostid(3)
- fchownat(2)
- group_member(3)
- getchar_unlocked(3)
- getservbyname(3)
- pthread_mutexattr_destroy(3)
- setpgid(2)
- acosf(3)
- ctanhf(3)
- shm_open(3)
- towupper(3)
- getdents(2)
- chown32(2)
- hypotf(3)
- undocumented(3)
- drand48(3)
- csinf(3)
- ctime_r(3)
- setlinebuf(3)
- ulimit(3)
- spu_create(2)
- fcvt_r(3)
- ipc(2)
- ftruncate64(2)
- fdopen(3)
- svcerr_noprog(3)
- getrpcport(3)
- csin(3)
- sinh(3)
- nrand48(3)
- openpty(3)
- xdr_double(3)
- pthread_attr_getscope(3)
- vfscanf(3)
- catanhf(3)
- inb(2)
- wcpcpy(3)
- ldexp(3)
- getopt_long(3)
- strerrordesc_np(3)
- mbsinit(3)
- argz_stringify(3)
- setbuffer(3)
- byteorder(3)
- expm1f(3)
- pthread_attr_setscope(3)
- gnu_dev_makedev(3)
- pipe(2)
- updwtmp(3)
- fts_read(3)
- ioctl_fat(2)
- h_errno(3)
- sem_getvalue(3)
- iswupper(3)
- lrint(3)
- perror(3)
- xdr_u_int(3)
- timer_create(2)
- iswdigit(3)
- fgetspent(3)
- fwrite_unlocked(3)
- reboot(2)
- ftruncate(2)
- getutmpx(3)
- pwrite64(2)
- getauxval(3)
- xdr_pointer(3)
- getprotobynumber(3)
- svc_destroy(3)
- vmsplice(2)
- inet_network(3)
- readdir_r(3)
- setsockopt(2)
- rexec(3)
- flock(2)
- getw(3)
- mmap2(2)
- j1f(3)
- cprojf(3)
- mkstemp(3)
- symlinkat(2)
- tempnam(3)
- pthread_attr_getaffinity_np(3)
- gethostbyname_r(3)
- signalfd4(2)
- sys_siglist(3)
- erfc(3)
- truncate64(2)
- verr(3)
- pthread_kill_other_threads_np(3)
- eaccess(3)
- fsetpos(3)
- slist(3)
- pmap_unset(3)
- modf(3)
- ioctl_pipe(2)
- vfwprintf(3)
- getresgid32(2)
- statfs64(2)
- cexp2(3)
- stdio_ext(3)
- login_tty(3)
- xdr_long(3)
- dlsym(3)
- clog2l(3)
- malloc_usable_size(3)
- fegetexceptflag(3)
- basename(3)
- fwrite(3)
- vhangup(2)
- printf(3)
- setnetent(3)
- gethostbyname2(3)
- mallinfo2(3)
- signbit(3)
- clnt_broadcast(3)
- sched_yield(2)
- sem_open(3)
- sigsetjmp(3)
- cacoshl(3)
- sem_unlink(3)
- setresuid(2)
- signgam(3)
- putw(3)
- imaxdiv(3)
- regex(3)
- alloc_hugepages(2)
- modff(3)
- exp10(3)
- cprojl(3)
- utime(2)
- clogf(3)
- pthread_mutex_unlock(3)
- erff(3)
- ioctl_userfaultfd(2)
- iswprint(3)
- roundl(3)
- sqrtl(3)
- fpurge(3)
- getusershell(3)
- fcloseall(3)
- xdr_opaque_auth(3)
- gethostent_r(3)
- fgetwc_unlocked(3)
- fchmod(2)
- strptime(3)
- lutimes(3)
- htole64(3)
- putchar_unlocked(3)
- create_module(2)
- isascii_l(3)
- sigaction(2)
- stdout(3)
- geteuid32(2)
- xprt_register(3)
- freopen(3)
- ccosl(3)
- pthread_setschedprio(3)
- rt_sigaction(2)
- getmntent(3)
- putwchar_unlocked(3)
- logl(3)
- remque(3)
- unsetenv(3)
- sigwaitinfo(2)
- pthread_mutexattr_getrobust_np(3)
- initstate_r(3)
- getfsfile(3)
- exp2l(3)
- isatty(3)
- lgamma_r(3)
- lrintf(3)
- outb(2)
- __clone2(2)
- strcpy(3)
- clnt_call(3)
- hypot(3)
- fegetexcept(3)
- tcsetpgrp(3)
- gets(3)
- malloc_info(3)
- nextupf(3)
- pthread_attr_getdetachstate(3)
- getaliasent_r(3)
- fstat64(2)
- futimesat(2)
- dl_iterate_phdr(3)
- posix_madvise(3)
- endnetgrent(3)
- tolower_l(3)
- pthread_attr_setstack(3)
- pread64(2)
- sigsetops(3)
- stty(2)
- process_vm_readv(2)
- isfinite(3)
- gethostbyaddr_r(3)
- cproj(3)
- gai_strerror(3)
- key_decryptsession(3)
- inet_ntop(3)
- __ppc_mdoio(3)
- btowc(3)
- setstate_r(3)
- if_nameindex(3)
- fdetach(2)
- random_r(3)
- iruserok_af(3)
- truncl(3)
- clearerr(3)
- lgammaf(3)
- lfind(3)
- ctanf(3)
- strcat(3)
- pthread_attr_getschedpolicy(3)
- pthread_rwlockattr_getkind_np(3)
- sigrelse(3)
- daemon(3)
- pthread_setcanceltype(3)
- sigevent(7)
- iswalnum(3)
- pmap_set(3)
- stdin(3)
- ceilf(3)
- asctime_r(3)
- poll(2)
- svc_unregister(3)
- isnanl(3)
- carg(3)
- getprotobyname(3)
- arm_fadvise(2)
- optind(3)
- mount_setattr(2)
- dlvsym(3)
- ntp_adjtime(3)
- abort(3)
- pthread_getname_np(3)
- execlp(3)
- bind(2)
- bsearch(3)
- endspent(3)
- register_printf_specifier(3)
- landlock_create_ruleset(2)
- mkostemp(3)
- setgroups(2)
- toupper_l(3)
- argz_extract(3)
- sigblock(3)
- j0l(3)
- argz_delete(3)
- setusershell(3)
- getspnam(3)
- optarg(3)
- vm86old(2)
- sigandset(3)
- getdtablesize(3)
- getsockname(2)
- pthread_sigqueue(3)
- ptsname(3)
- j1(3)
- lgamma(3)
- getpagesize(2)
- pthread_mutex_lock(3)
- setsid(2)
- strncat(3)
- ioctl_kd(2)
- tsearch(3)
- mq_notify(2)
- fcvt(3)
- clntudp_bufcreate(3)
- getpwent_r(3)
- pthread_getspecific(3)
- memfrob(3)
- arc4random_buf(3)
- forkpty(3)
- powl(3)
- dlopen(3)
- stderr(3)
- set_thread_area(2)
- query_module(2)
- sem_close(3)
- strndup(3)
- __malloc_hook(3)
- setjmp(3)
- stdio(3)
- bdflush(2)
- sendto(2)
- mpx(2)
- fopen(3)
- setpriority(2)
- nextdownl(3)
- mprobe(3)
- oldstat(2)
- sem_destroy(3)
- bcopy(3)
- remap_file_pages(2)
- isgreaterequal(3)
- getpass(3)
- seekdir(3)
- break(2)
- authunix_create_default(3)
- tty_ioctl(4)
- process_madvise(2)
- endfsent(3)
- atoq(3)
- strftime(3)
- fts(3)
- getgrgid(3)
- isxdigit(3)
- ftello(3)
- regcomp(3)
- error(3)
- getenv(3)
- clnt_sperrno(3)
- readahead(2)
- y0(3)
- roundup(3)
- io_destroy(2)
- vsnprintf(3)
- lgammal(3)
- eventfd_write(3)
- pthread_mutex_trylock(3)
- lchown(2)
- dladdr(3)
- error_print_progname(3)
- pthread_mutexattr_settype(3)
- strspn(3)
- __after_morecore_hook(3)
- localtime(3)
- fsync(2)
- ether_aton(3)
- csinhl(3)
- trunc(3)
- xdr_u_char(3)
- syslog(3)
- y1f(3)
- ioctl_nsfs(2)
- wmemcmp(3)
- ffsll(3)
- ether_ntohost(3)
- bswap_32(3)
- umount2(2)
- sigfillset(3)
- landlock_restrict_self(2)
- pthread_join(3)
- sysinfo(2)
- clock_settime(2)
- llrint(3)
- s390_guarded_storage(2)
- getc(3)
- inet_lnaof(3)
- tcgetpgrp(3)
- clock_getres(2)
- etext(3)
- strfmon_l(3)
- putwc_unlocked(3)
- xdr_replymsg(3)
- scalbl(3)
- fdim(3)
- getspent(3)
- sem_timedwait(3)
- posix_fallocate(3)
- res_nmkquery(3)
- pthread_spin_unlock(3)
- mq_timedsend(2)
- opterr(3)
- getloadavg(3)
- strsignal(3)
- finite(3)
- inw_p(2)
- csinhf(3)
- execveat(2)
- seed48(3)
- sigset(3)
- setgroups32(2)
- logbl(3)
- wcsdup(3)
- clnt_geterr(3)
- sys_errlist(3)
- inotify_rm_watch(2)
- qgcvt(3)
- wcspbrk(3)
- sin(3)
- lookup_dcookie(2)
- s390_pci_mmio_read(2)
- wcscmp(3)
- getutxent(3)
- pciconfig_read(2)
- initstate(3)
- backtrace(3)
- putc_unlocked(3)
- fedisableexcept(3)
- rt_sigprocmask(2)
- clock_adjtime(2)
- fwprintf(3)
- jnl(3)
- grantpt(3)
- cimagl(3)
- getgrnam_r(3)
- remquol(3)
- swprintf(3)
- mbrtowc(3)
- fileno_unlocked(3)
- readlinkat(2)
- sigignore(3)
- strndupa(3)
- semctl(2)
- assert_perror(3)
- sendfile(2)
- shm_unlink(3)
- log(3)
- ungetc(3)
- erf(3)
- qfcvt(3)
- pthread_atfork(3)
- login(3)
- setservent(3)
- jrand48_r(3)
- wcsnlen(3)
- tcflow(3)
- pthread_cond_destroy(3)
- inl(2)
- srand48_r(3)
- erfcf(3)
- iconv(3)
- pthread_mutex_consistent_np(3)
- fabsl(3)
- pclose(3)
- nfsservctl(2)
- gai_error(3)
- wcsncmp(3)
- islower_l(3)
- iswctype(3)
- svc_register(3)
- arm_sync_file_range(2)
- strfry(3)
- strfromd(3)
- getttyent(3)
- rand(3)
- fchown32(2)
- ctime(3)
- fsetxattr(2)
- feupdateenv(3)
- random(3)
- getpwnam_r(3)
- sigwait(3)
- aio_fsync(3)
- mq_open(2)
- tanh(3)
- localtime_r(3)
- bsd_signal(3)
- strsep(3)
- mknodat(2)
- cexpf(3)
- cacosh(3)
- mbrlen(3)
- aio_cancel(3)
- mq_getsetattr(2)
- fdatasync(2)
- htons(3)
- sem_post(3)
- htobe16(3)
- vtimes(3)
- fgetpwent_r(3)
- getwchar_unlocked(3)
- mkdirat(2)
- dup(2)
- free_hugepages(2)
- feraiseexcept(3)
- lockf(3)
- userfaultfd(2)
- pthread_attr_setaffinity_np(3)
- memcpy(3)
- prlimit64(2)
- ferror(3)
- ldexpf(3)
- aio_return(3)
- adjtimex(2)
- execle(3)
- tailq(3)
- cabs(3)
- endaliasent(3)
- execvp(3)
- hasmntopt(3)
- if_freenameindex(3)
- signal(2)
- dn_comp(3)
- pthread_attr_getstack(3)
- ether_hostton(3)
- re_comp(3)
- cexp2l(3)
- getwd(3)
- llroundl(3)
- cos(3)
- pthread_mutex_consistent(3)
- isalpha_l(3)
- io_cancel(2)
- frexp(3)
- finitel(3)
- perf_event_open(2)
- pthread_exit(3)
- ioctl_console(2)
- timelocal(3)
- timersub(3)
- setresgid(2)
- semop(2)
- getgroups(2)
- envz_entry(3)
- xdr_u_long(3)
- seccomp(2)
- ftrylockfile(3)
- setuid(2)
- wcwidth(3)
- llround(3)
- cacoshf(3)
- pthread_attr_setschedpolicy(3)
- fgetpos(3)
- xdr_array(3)
- sprintf(3)
- wmemset(3)
- setcontext(3)
- copysignl(3)
- be64toh(3)
- matherr(3)
- hypotl(3)
- rawmemchr(3)
- fmodf(3)
- mount(2)
- mktime(3)
- stdarg(3)
- clnttcp_create(3)
- string(3)
- profil(3)
- clnt_perror(3)
- getpriority(2)
- regerror(3)
- clone2(2)
- getgid(2)
- pthread_spin_lock(3)
- iswblank(3)
- ftell(3)
- dup3(2)
- toascii(3)
- strncpy(3)
- mrand48_r(3)
- setstate(3)
- sigqueue(3)
- cpowf(3)
- setlogmask(3)
- sched_getcpu(3)
- htobe32(3)
- list(3)
- isdigit_l(3)
- chdir(2)
- fstat(2)
- pwritev2(2)
- get_thread_area(2)
- freelocale(3)
- acoshl(3)
- socketpair(2)
- scalbln(3)
- fpclassify(3)
- getpwnam(3)
- pthread_getcpuclockid(3)
- ioprio_get(2)
- strtok_r(3)
- exit_group(2)
- scalbnf(3)
- xdrrec_create(3)
- pthread_mutex_destroy(3)
- sqrt(3)
- dirname(3)
- exit(2)
- ulckpwdf(3)
- cargl(3)
- powerof2(3)
- simpleq(3)
- process_vm_writev(2)
- fdopendir(3)
- getpt(3)
- floorl(3)
- va_start(3)
- lcong48(3)
- strerror_l(3)
- xdrrec_eof(3)
- key_setsecret(3)
- lstat64(2)
- memfd_secret(2)
- sigreturn(2)
- casinhf(3)
- valloc(3)
- stat64(2)
- jn(3)
- sinl(3)
- pthread_testcancel(3)
- cfgetispeed(3)
- dup2(2)
- getnetent(3)
- pthread_setconcurrency(3)
- memccpy(3)
- rt_sigqueueinfo(2)
- ccosf(3)
- sincos(3)
- tcdrain(3)
- ccos(3)
- chmod(2)
- cacosf(3)
- lstat(2)
- pthread_spin_trylock(3)
- sigisemptyset(3)
- getrpcbyname(3)
- fpathconf(3)
- copysign(3)
- round(3)
- wmemchr(3)
- qfcvt_r(3)
- fattach(2)
- __fsetlocking(3)
- adjtime(3)
- makedev(3)
- des_crypt(3)
- iswspace(3)
- twalk(3)
- exec(3)
- link(2)
- fileno(3)
- endpwent(3)
- logb(3)
- wcscspn(3)
- console_ioctl(4)
- fgetpwent(3)
- setegid(2)
- clnt_destroy(3)
- getaddrinfo_a(3)
- svc_getargs(3)
- addmntent(3)
- globfree(3)
- islower(3)
- muntrace(3)
- clnt_pcreateerror(3)
- llrintl(3)
- clnt_control(3)
- fgetspent_r(3)
- strstr(3)
- putmsg(2)
- __fwritable(3)
- res_nsearch(3)
- fseeko(3)
- mq_timedreceive(3)
- log10(3)
- fexecve(3)
- gammaf(3)
- pthread_setschedparam(3)
- wcscpy(3)
- xdr_float(3)
- pthread_attr_setdetachstate(3)
- sem_wait(3)
- pow10l(3)
- re_exec(3)
- rand_r(3)
- putpmsg(2)
- getdelim(3)
- utimes(2)
- mq_close(3)
- setutent(3)
- creall(3)
- mq_send(3)
- telldir(3)
- powf(3)
- erfl(3)
- pthread_self(3)
- pselect6(2)
- unlocked_stdio(3)
- insw(2)
- cfsetspeed(3)
- argz_create(3)
- xdr_string(3)
- pthread_attr_getguardsize(3)
- finitef(3)
- setlocale(3)
- bcmp(3)
- fmtmsg(3)
- sendmsg(2)
- pthread_cleanup_push(3)
- inb_p(2)
- mmap64(3)
- getuid32(2)
- truncate(2)
- mlock2(2)
- fegetround(3)
- ugetrlimit(2)
- getprotobynumber_r(3)
- utmpxname(3)
- isinf(3)
- clearerr_unlocked(3)
- stime(2)
- nftw(3)
- duplocale(3)
- svcraw_create(3)
- svc_getcaller(3)
- ctanhl(3)
- cbrt(3)
- floorf(3)
- sethostid(3)
- sigemptyset(3)
- sigaltstack(2)
- mkfifo(3)
- lsearch(3)
- getservent_r(3)
- islessgreater(3)
- floor(3)
- argz_append(3)
- tzset(3)
- res_mkquery(3)
- fstatat(2)
- strchr(3)
- semtimedop(2)
- bindresvport(3)
- tcsetattr(3)
- warn(3)
- getservent(3)
- atanhl(3)
- tdelete(3)
- ynf(3)
- ether_ntoa_r(3)
- fesetenv(3)
- mq_timedsend(3)
- quotactl(2)
- init_module(2)
- rcmd(3)
- fenv(3)
- getutxid(3)
- pthread_mutexattr_getpshared(3)
- scalbnl(3)
- atan2l(3)
- argz_count(3)
- rpmatch(3)
- timerfd_gettime(2)
- ualarm(3)
- pthread_attr_init(3)
- vdprintf(3)
- pthread_cancel(3)
- fflush(3)
- setkey_r(3)
- mbstowcs(3)
- mremap(2)
- strcasestr(3)
- hcreate_r(3)
- siginterrupt(3)
- offsetof(3)
- atan(3)
- wctomb(3)
- getutent(3)
- significand(3)
- arm_fadvise64_64(2)
- dremf(3)
- wcswidth(3)
- syscall(2)
- rintf(3)
- bswap_64(3)
- pthread_attr_getschedparam(3)
- lroundf(3)
- timegm(3)
- posix_fadvise(2)
- getrlimit(2)
- svc_freeargs(3)
- xdr_enum(3)
- hcreate(3)
- ptrace(2)
- backtrace_symbols_fd(3)
- fetestexcept(3)
- ccosh(3)
- htole32(3)
- kexec_load(2)
- fallocate(2)
- timer_gettime(2)
- tgammaf(3)
- errno(3)
- sched_get_priority_max(2)
- xdr_getpos(3)
- vwprintf(3)
- ssetmask(2)
- ether_ntoa(3)
- waitpid(2)
- sched_getattr(2)
- inotify_init(2)
- fma(3)
- gnu_get_libc_version(3)
- svctcp_create(3)
- wcstombs(3)
- gethostname(2)
- strerror_r(3)
- sigismember(3)
- fgetws_unlocked(3)
- hash(3)
- circleq(3)
- getrpcbynumber_r(3)
- pthread_cond_timedwait(3)
- uname(2)
- fgetc_unlocked(3)
- mq_open(3)
- cosl(3)
- rewinddir(3)
- nextdown(3)
- longjmp(3)
- execv(3)
- iconv_open(3)
- xencrypt(3)
- ctermid(3)
- isgraph_l(3)
- move_pages(2)
- isunordered(3)
- msgsnd(2)
- rt_sigtimedwait(2)
- syncfs(2)
- mlockall(2)
- pthread_getschedparam(3)
- lsetxattr(2)
- getutid_r(3)
- log1pl(3)
- catanf(3)
- passwd2des(3)
- iconv_close(3)
- aligned_alloc(3)
- sched_setscheduler(2)
- gmtime(3)
- __free_hook(3)
- acoshf(3)
- mtrace(3)
- resolver(3)
- clog10f(3)
- sethostname(2)
- pthread_attr_setguardsize(3)
- tuxcall(2)
- atanh(3)
- ispunct_l(3)
- svcudp_bufcreate(3)
- ctanh(3)
- j1l(3)
- log10l(3)
- alloca(3)
- sigpending(2)
- nexttoward(3)
- isnormal(3)
- svc_getreq(3)
- putchar(3)
- getnetbyaddr(3)
- cpowl(3)
- get_kernel_syms(2)
- getutline_r(3)
- pthread_setaffinity_np(3)
- isnan(3)
- getprotoent(3)
- catclose(3)
- getsid(2)
- endrpcent(3)
- fts_close(3)
- gnu_dev_minor(3)
- ruserok_af(3)
- getutent_r(3)
- getegid(2)
- sgetmask(2)
- posix_memalign(3)
- atanf(3)
- unshare(2)
- lremovexattr(2)
- strncasecmp(3)
- endutent(3)
- updwtmpx(3)
- outsw(2)
- sched_getparam(2)
- setuid32(2)
- catgets(3)
- nextupl(3)
- openat(2)
- logout(3)
- free(3)
- setfsuid(2)
- getutline(3)
- svc_sendreply(3)
- fadvise64_64(2)
- cargf(3)
- __ppc_set_ppr_low(3)
- casinh(3)
- outb_p(2)
- fputwc(3)
- log10f(3)
- getnetgrent(3)
- fputws_unlocked(3)
- ffsl(3)
- endttyent(3)
- isgreater(3)
- sigmask(3)
- sgetspent_r(3)
- fmaxf(3)
- openlog(3)
- strncmp(3)
- closedir(3)
- rexec_af(3)
- exp2(3)
- mcheck(3)
- isalpha(3)
- pthread_mutex_init(3)
- catopen(3)
- clock_nanosleep(2)
- ioctl(2)
- remainder(3)
- olduname(2)
- getcpu(2)
- setns(2)
- asinhl(3)
- wcscasecmp(3)
- nearbyintl(3)
- atan2f(3)
- wctob(3)
- nextdownf(3)
- gmtime_r(3)
- fmal(3)
- setfsgid32(2)
- dlinfo(3)
- posix_spawnp(3)
- fgets_unlocked(3)
- major(3)
- fseek(3)
- xdr_callhdr(3)
- execve(2)
- exit(3)
- makecontext(3)
- sysctl(2)
- oldolduname(2)
- getgrouplist(3)
- pthread_getattr_np(3)
- ffs(3)
- sem_init(3)
- gcvt(3)
- fts_children(3)
- rt_sigreturn(2)
- mallinfo(3)
- insl(2)
- geteuid(2)
- signalfd(2)
- erfcl(3)
- sched_get_priority_min(2)
- sched_setaffinity(2)
- wcsrchr(3)
- xdr_reference(3)
- snprintf(3)
- delete_module(2)
- j0f(3)
- malloc_hook(3)
- casinf(3)
- y0f(3)
- endgrent(3)
- y1l(3)
- pthread_create(3)
- wcsncasecmp(3)
- pidfd_getfd(2)
- htobe64(3)
- _sysctl(2)
- lrand48_r(3)
- warnx(3)
- lgammaf_r(3)
- verrx(3)
- finit_module(2)
- gsignal(3)
- recvfrom(2)
- log2(3)
- fflush_unlocked(3)
- getaliasbyname_r(3)
- pthread_mutexattr_setrobust(3)
- getdirentries(3)
- getrpcbyname_r(3)
- ppoll(2)
- tmpfile(3)
- isupper_l(3)
- xdr_free(3)
- res_nquery(3)
- fts_open(3)
- shutdown(2)
- xdr_callmsg(3)
- coshl(3)
- ntp_gettimex(3)
- afs_syscall(2)
- be32toh(3)
- fchmodat(2)
- addseverity(3)
- pause(2)
- strcmp(3)
- mkostemps(3)
- wcsrtombs(3)
- scandir(3)
- __freadable(3)
- killpg(3)
- add_key(2)
- strcoll(3)
- migrate_pages(2)
- pthread_setattr_default_np(3)
- pthread_attr_setsigmask_np(3)
- sigabbrev_np(3)
- readdir(2)
- subpage_prot(2)
- strfromf(3)
- sysv_signal(3)
- gethostbyname2_r(3)
- outl_p(2)
- sync(2)
- pthread_attr_getinheritsched(3)
- socket(2)
- msgrcv(2)
- fgetws(3)
- pthread_cleanup_push_defer_np(3)
- getnetgrent_r(3)
- ynl(3)
- endservent(3)
- srand(3)
- endmntent(3)
- cbrtl(3)
- setitimer(2)
- pmap_rmtcall(3)
- svcerr_systemerr(3)
- fesetround(3)
- ilogbf(3)
- __fwriting(3)
- log1p(3)
- futimens(3)
- xdrrec_endofrecord(3)
- setreuid32(2)
- swab(3)
- pthread_spin_init(3)
- memchr(3)
- fminf(3)
- getipnodebyname(3)
- msgop(2)
- wait(2)
- ether_aton_r(3)
- open_wmemstream(3)
- xdr_bool(3)
- pthread_tryjoin_np(3)
- xdr_int(3)
- inet_net_ntop(3)
- fdimf(3)
- srand48(3)
- xdr_setpos(3)
- asinf(3)
- program_invocation_name(3)
- write(2)
- mkdtemp(3)
- pthread_cleanup_pop(3)
- ptsname_r(3)
- lgammal_r(3)
- pthread_attr_getstackaddr(3)
- authunix_create(3)
- getpmsg(2)
- ceill(3)
- cexp2f(3)
- kcmp(2)
- setup(2)
- err(3)
- sync_file_range2(2)
- getpid(2)
- wcsncat(3)
- envz_get(3)
- futimes(3)
- mincore(2)
- herror(3)
- ether_line(3)
- feholdexcept(3)
- fputc(3)
- keyctl(2)
- timer_delete(2)
- posix_spawn(3)
- faccessat2(2)
- setnetgrent(3)
- pwrite(2)
- aio_read(3)
- shmget(2)
- acosh(3)
- sigdelset(3)
- __ppc_get_timebase(3)
- __flbf(3)
- dladdr1(3)
- argz_create_sep(3)
- mblen(3)
- gethostent(3)
- pciconfig_iobase(2)
- recvmmsg(2)
- isprint_l(3)
- csqrtf(3)
- wcstoimax(3)
- hsearch_r(3)
- svcudp_create(3)
- setreuid(2)
- le16toh(3)
- name_to_handle_at(2)
- strftime_l(3)
- pthread_attr_setschedparam(3)
- eventfd(2)
- atanhf(3)
- pthread_setspecific(3)
- pthread_cond_init(3)
- acosl(3)
- llistxattr(2)
- fputwc_unlocked(3)
- scanf(3)
- getmntent_r(3)
- getchar(3)
- res_ninit(3)
- error_one_per_line(3)
- sigsetmask(3)
- putwchar(3)
- llroundf(3)
- rt_sigpending(2)
- send(2)
- wcsstr(3)
- log2l(3)
- fmod(3)
- va_copy(3)
- res_search(3)
- res_nsend(3)
- res_query(3)
- wait3(2)
- encrypt_r(3)
- system(3)
- close_range(2)
- ecvt_r(3)
- read(2)
- auth_destroy(3)
- realloc(3)
- pipe2(2)
- dn_expand(3)
- timerclear(3)
- get_avphys_pages(3)
- mbsnrtowcs(3)
- strtok(3)
- fwide(3)
- __ppc_get_timebase_freq(3)
- gai_suspend(3)
- stpcpy(3)
- lldiv(3)
- iswxdigit(3)
- posix_openpt(3)
- s390_pci_mmio_write(2)
- pthread_spin_destroy(3)
- callrpc(3)
- getifaddrs(3)
- aio_suspend(3)
- fread_unlocked(3)
- get_nprocs_conf(3)
- getuid(2)
- spu_run(2)
- termios(3)
- umask(2)
- csqrtl(3)
- register_printf_modifier(3)
- sem_trywait(3)
- tee(2)
- msync(2)
- mpool(3)
- setdomainname(2)
- fopencookie(3)
- nl_langinfo(3)
- sockatmark(3)
- getspent_r(3)
- casinhl(3)
- fdiml(3)
- ntohs(3)
- fgets(3)
- time(2)
- casinl(3)
- pthread_detach(3)
- seccomp_unotify(2)
apt-get install manpages-dev
Available languages:
en frManual
userfaultfd
NOMBIBLIOTHĂQUE
SYNOPSIS
DESCRIPTION
Utilisation
Fonctionnement dâuserfaultfd
Mode protection dâĂ©criture dâuserfaultfd (depuis Linux 5.7)
Mode erreur mineure dâuserfaultfd (depuis Linux 5.13)
Lire Ă partir de la structure userfaultfd
VALEUR RENVOYĂE
ERREURS
STANDARDS
HISTORIQUE
NOTES
BOGUES
EXEMPLES
Source du programme
VOIR AUSSI
TRADUCTION
NOM
userfaultfd - Créer un descripteur de fichier pour gérer les erreurs de page en espace utilisateur
BIBLIOTHĂQUE
BibliothĂšque C standard ( libc , -lc )
SYNOPSIS
#include
<fcntl.h>
/* Définition des constantes
O_*
*/
#include <sys/syscall.h>
/* Définition des
constantes
SYS_*
*/
#include <linux/userfaultfd.h>
/*
Définition des constantes
UFFD_*
*/
#include <unistd.h>
int syscall(SYS_userfaultfd, int flags );
Note : la glibc ne fournit pas dâenveloppe pour userfaultfd (), imposant lâutilisation de syscall (2).
DESCRIPTION
userfaultfd () crĂ©e un nouvel objet userfaultfd qui peut ĂȘtre utilisĂ© pour la dĂ©lĂ©gation de la gestion des erreurs de page Ă une application de lâespace utilisateur et renvoie un descripteur de fichier qui fait rĂ©fĂ©rence au nouvel objet. Le nouvel objet userfaultfd est configurĂ© en utilisant ioctl (2).
Une fois lâobjet userfaultfd configurĂ©, lâapplication peut utiliser read (2) pour recevoir des notification dâuserfaultfd. Les lectures Ă partir dâuserfaultfd peuvent ĂȘtre bloquantes ou non bloquantes en fonction de la valeur des attributs ( flags ) utilisĂ©s pour la crĂ©ation de lâuserfaultfd ou des appels suivants Ă fcntl (2).
Les valeurs
suivantes peuvent ĂȘtre combinĂ©es dans
flags
par un OU binaire pour modifier le comportement
dâ
userfaultfd
() :
O_CLOEXEC
Activer lâattribut close-on-exec pour le nouveau descripteur de fichier userfaultfd. Consultez la description de lâattribut O_CLOEXEC dans open (2).
O_NONBLOCK
Permettre une opĂ©ration non bloquante pour lâobjet userfaultfd. Voir la description de lâattribut O_NONBLOCK dans open (2).
UFFD_USER_MODE_ONLY
Câest un attribut spĂ©cifique Ă userfaultfd qui a Ă©tĂ© introduit dans Linux 5.11. Quand il est dĂ©fini, lâobjet userfaultfd ne pourra gĂ©rer que les erreurs de page provenant de lâespace utilisateur dans les rĂ©gions enregistrĂ©es. Quand une erreur provenant du noyau est dĂ©clenchĂ©e dans lâintervalle enregistrĂ© avec cet userfaultfd, un signal SIGBUS sera envoyĂ©.
Quand le dernier descripteur de fichier faisant rĂ©fĂ©rence Ă un objet userfaultfd est fermĂ©, tous les intervalles de mĂ©moire qui ont Ă©tĂ© enregistrĂ©s avec lâobjet sont dĂ©senregistrĂ©s et les Ă©vĂ©nements non lus sont vidĂ©s.
Userfaultfd
gĂšre trois modes dâenregistrement :
UFFDIO_REGISTER_MODE_MISSING
(depuis
Linux 4.10)
Quand il est enregistrĂ© avec le mode UFFDIO_REGISTER_MODE_MISSING , lâespace utilisateur recevra une notification dâerreur de page lors de lâaccĂšs Ă une page manquante. LâexĂ©cution du thread fautif sera arrĂȘtĂ©e jusquâĂ ce que lâerreur de page soit rĂ©solue Ă partir de lâespace utilisateur par un ioctl UFFDIO_COPY ou UFFDIO_ZEROPAGE .
UFFDIO_REGISTER_MODE_MINOR (depuis Linux 5.13)
Quand il est enregistrĂ© avec le mode UFFDIO_REGISTER_MODE_MINOR , lâespace utilisateur recevra une notification dâerreur de page lorsquâune erreur de page mineure survient. Câest-Ă -dire quand une page de sauvegarde est dans le cache de page, mais les entrĂ©es dans la table de pages nâexistent pas encore. LâexĂ©cution du thread fautif sera arrĂȘtĂ©e jusquâĂ ce que lâerreur de page soit rĂ©solue Ă partir de lâespace utilisateur par un ioctl UFFDIO_CONTINUE .
UFFDIO_REGISTER_MODE_WP (depuis Linux 5.7)
Quand il est enregistrĂ© avec le mode UFFDIO_REGISTER_MODE_WP , lâespace utilisateur recevra une notification dâerreur de page lors dâune Ă©criture sur une page protĂ©gĂ©e en Ă©criture. LâexĂ©cution du thread fautif sera arrĂȘtĂ©e jusquâĂ ce que lâespace utilisateur supprime la protection de la page en utilisant un ioctl UFFDIO_WRITEPROTECT .
Plusieurs modes peuvent ĂȘtre activĂ©s en mĂȘme temps pour le mĂȘme intervalle de mĂ©moire.
Depuis Linux 4.14, une notification dâerreur de page dâuserfaultfd peut incorporer de façon sĂ©lective des informations dâidentifiant des threads en erreur dans une notification. Il est nĂ©cessaire dâactiver cette fonctionnalitĂ© explicitement en utilisant le bit de fonction UFFD_FEATURE_THREAD_ID lors de lâinitialisation du contexte dâuserfaultfd. Par dĂ©faut, la dĂ©claration de lâidentifiant du thread est dĂ©sactivĂ©e.
Utilisation
Le mĂ©canisme dâuserfaultfd est conçu pour permettre Ă un thread dans un programme multi-thread de rĂ©aliser la pagination en espace utilisateur pour dâautres threads dans le processus. Lorsquâun erreur de page survient pour une des rĂ©gions enregistrĂ©es dans lâobjet userfaultfd, le thread en erreur est mis en sommeil et un Ă©vĂ©nement est gĂ©nĂ©rĂ© qui peut ĂȘtre lu au moyen du descripteur de fichier userfaultfd. Le thread de gestion dâerreur lit les Ă©vĂ©nements Ă partir de ce descripteur de fichier et les corrige en utilisant les opĂ©rations dĂ©crites dans ioctl_userfaultfd (2). Lors de lâintervention sur les Ă©vĂ©nements dâerreur de page, le thread de gestion dâerreur peut dĂ©clencher le rĂ©veil dâun thread endormi.
Il est possible que les threads en erreur et les threads traitant les erreurs soient exĂ©cutĂ©s dans le contexte de processus diffĂ©rents. Dans ce cas, ces threads peuvent appartenir Ă diffĂ©rents programmes, et le programme qui exĂ©cute les threads en erreur ne collaborera pas nĂ©cessairement avec le programme qui gĂšre les erreurs de page. Dans ce mode non coopĂ©ratif, le processus qui contrĂŽle userfaultfd et gĂšre les erreurs de page a besoin dâavoir connaissance des modifications dans la disposition de la mĂ©moire virtuelle du processus en erreur pour Ă©viter une corruption de mĂ©moire.â
Depuis Linux 4.11, userfaultfd peut aussi informer les threads gĂ©rant les erreurs des modifications dans la disposition de la mĂ©moire virtuelle du processus en erreur. De plus, si le processus en erreur invoque fork (2), les objets userfaultfd associĂ©s au parent peuvent ĂȘtre dupliquĂ©s dans le processus enfant et le contrĂŽleur dâuserfaultfd sera informĂ© (au moyen de UFFD_EVENT_FORK dĂ©crit plus bas) sur le descripteur de fichier associĂ© aux objets userfault créés pour le processus enfant, ce qui permet au contrĂŽleur dâuserfaultfd de rĂ©aliser la pagination de lâespace utilisateur pour le processus enfant. Ă la diffĂ©rence des erreurs de page qui doivent ĂȘtre synchrones et rĂ©clament un rĂ©veil explicite ou explicite, tous les autres Ă©vĂ©nements sont envoyĂ©s de façon asynchrone et le processus non coopĂ©ratif reprend son exĂ©cution dĂšs que le gestionnaire dâuserfaultfd exĂ©cute read (2). Le gestionnaire dâuserfaultfd doit soigneusement synchroniser les appels Ă UFFDIO_COPY avec le traitement des Ă©vĂ©nements.
Le modĂšle asynchrone actuel dâenvoi dâĂ©vĂ©nement est optimal pour des implĂ©mentations de gestionnaire userfaultfd non coopĂ©ratif Ă thread unique.
Depuis Linux 5.7, userfaultfd peut effectuer le suivi synchrone de page sale en utilisant le nouveau mode dâenregistrement de page protĂ©gĂ©e en Ă©criture. Il faut vĂ©rifier le bit de fonction UFFD_FEATURE_PAGEFAULT_FLAG_WP avant dâutiliser cette fonctionnalitĂ©. Le mode protection en Ă©criture, similaire au mode dâorigine page manquante dâuserfaultfd, gĂ©nĂšre une notification dâuserfaultfd quand la page protĂ©gĂ©e en Ă©criture est Ă©crite. Lâutilisateur doit rĂ©soudre lâerreur de page en dĂ©protĂ©geant la page fautive et en forçant le thread fautif Ă continuer. Pour plus dâinformations, consultez la section « Mode protection dâĂ©criture dâuserfaultfd »
Fonctionnement dâuserfaultfd
AprĂšs la crĂ©ation de lâobjet userfaultfd avec userfaultfd (), lâapplication doit lâactiver en utilisant lâopĂ©ration UFFDIO_API de ioctl (2). Cette opĂ©ration permet une connexion en deux Ă©tapes entre le noyau et lâespace utilisateur pour dĂ©terminer quelle version de lâAPI et quelles fonctions sont prises en charge par le noyau. et ensuite pour activer les fonctions voulues par lâespace utilisateur. Cette opĂ©ration doit ĂȘtre rĂ©alisĂ©e avant toutes les autres opĂ©rations ioctl (2) dĂ©crites plus bas (ou ces opĂ©rations Ă©chouent avec lâerreur EINVAL .)
AprĂšs le succĂšs dâune opĂ©ration UFFDIO_API , lâapplication enregistre alors les intervalles dâadresses mĂ©moire en utilisant lâopĂ©ration dâ ioctl (2) UFFDIO_REGISTER . Quand lâopĂ©ration UFFDIO_REGISTER sâest achevĂ©e avec succĂšs, une erreur de page, se produisant dans lâintervalle de mĂ©moire requis et satisfaisant au mode dĂ©fini au moment de lâenregistrement, sera transmis par le noyau Ă lâapplication de lâespace utilisateur. Lâapplication peut alors utiliser diverses opĂ©rations dâ ioctl (2) (parexemple, UFFDIO_COPY , UFFDIO_ZEROPAGE ou UFFDIO_CONTINUE ) pour rĂ©soudre lâerreur de page.
Depuis Linux 4.4, si lâapplication dĂ©finit le bit de la fonction UFFD_FEATURE_SIGBUS en utilisant lâ ioctl (2) UFFDIO_API , aucune notification dâerreur d page ne sera transmise Ă lâespace utilisateur. Un signal est envoyĂ© Ă la place au processus en erreur. Avec cette fonction, userfaultfd peut ĂȘtre utilisĂ© Ă des fins de robustesse pour capturer simplement tout accĂšs aux zones dans lâintervalle dâadresses enregistrĂ© qui nâont pas de pages allouĂ©es sans avoir Ă Ă©couter les Ă©vĂ©nements dâuserfaultfd. Aucun contrĂŽleur dâuserfaultfd ne sera requis pour traiter ce type dâaccĂšs mĂ©moire. Par exemple, cette fonction peut ĂȘtre utile Ă des applications qui dĂ©sirent empĂȘcher le noyau dâallouer des pages automatiquement et de remplir des trous dans des fichiers creux quand câest un mappage mĂ©moire qui permet lâaccĂšs aux trous.
La fonction UFFD_FEATURE_SIGBUS est héritée de façon implicite avec fork (2) si elle est utilisée en combinaison avec UFFD_FEATURE_FORK .
Des dĂ©tails sur les diffĂ©rentes opĂ©rations dâ ioctl (2) sont disponibles dans ioctl_userfaultfd (2).
Depuis Linux 4.11, les Ă©vĂ©nements autres que les erreurs de page peuvent ĂȘtre activĂ©s pendant lâopĂ©ration UFFDIO_API .
JusquâĂ Linux 4.11, userfaultfd ne peut ĂȘtre utilisĂ© quâavec des mappages de mĂ©moire privĂ©e anonyme. Depuis Linux 4.11, userfaultfd peut aussi ĂȘtre utilisĂ© avec des mappages de mĂ©moire hugelbfs et partagĂ©e.
Mode protection dâĂ©criture dâuserfaultfd (depuis Linux 5.7)
Depuis Linux 5.7, userfaultfd prend en charge le mode protection dâĂ©criture pour la mĂ©moire anonyme. Lâutilisateur doit dâabord vĂ©rifier la disponibilitĂ© de cette fonctionnalitĂ© en utilisant lâioctl UFFDIO_API sur le bit de fonction UFFD_FEATURE_PAGEFAULT_FLAG_WP avant dâutiliser cette fonctionnalitĂ©.
Depuis Linux 5.19, le mode protection dâĂ©criture est aussi pris en charge sur la mĂ©moire de type shmem ou hugetlbfs. Il peut ĂȘtre dĂ©tectĂ© avec le bit de fonction UFFD_FEATURE_WP_HUGETLBFS_SHMEM .
Pour enregistrer avec le mode page protĂ©gĂ©e en Ă©criture de userfaultfd, lâutilisateur doit initier lâioctl UFFDIO_REGISTER avec le mode UFFDIO_REGISTER_MODE_WP dĂ©fini. Notez quâil est permis de surveiller le mĂȘme intervalle de mĂ©moire avec plusieurs modes. Par exemple, un utilisateur peut effectuer UFFDIO_REGISTER avec le mode dĂ©fini Ă UFFDIO_REGISTER_MODE_MISSING | UFFDIO_REGISTER_MODE_WP . Quand seul le mode UFFDIO_REGISTER_MODE_WP est enregistrĂ©, lâespace utilisateur ne recevra aucune notification quand une page manquante est Ă©crite. Ă la place, lâespace utilisateur ne recevra une notification dâerreur de page protĂ©gĂ©e en Ă©criture que quand une page existante et protĂ©gĂ©e en Ă©criture est Ă©crite.
AprĂšs que lâioctl UFFDIO_REGISTER sâest terminĂ© avec le mode UFFDIO_REGISTER_MODE_WP dĂ©fini, lâutilisateur peut protĂ©ger en Ă©criture toute mĂ©moire dans lâintervalle en utilisant lâioctl UFFDIO_WRITEPROTECT oĂč uffdio_writeprotect.mode devrait ĂȘtre dĂ©fini Ă UFFDIO_WRITEPROTECT_MODE_WP .
Quand un Ă©vĂ©nement de protection en Ă©criture survient, lâespace utilisateur recevra une notification dâerreur de page dont lâ uffd_msg.pagefault.flags aura lâattribut UFFD_PAGEFAULT_FLAG_WP dĂ©fini. Notez : dans la mesure oĂč seulement les Ă©critures peuvent dĂ©clencher ce genre dâerreur, les notifications de protection en Ă©criture auront toujours le bit UFFD_PAGEFAULT_FLAG_WRITE dĂ©fini en mĂȘme temps que le bit UFFD_PAGEFAULT_FLAG_WP .
Pour rĂ©soudre une erreur de page de protection dâĂ©criture, lâutilisateur doit initier un autre ioctl UFFDIO_WRITEPROTECT dont lâ uffd_msg.pagefault.flags doit avoir lâattribut UFFDIO_WRITEPROTECT_MODE_WP effacĂ© aprĂšs la page ou lâintervalle fautif.
Mode erreur mineure dâuserfaultfd (depuis Linux 5.13)
Depuis Linux 5.13, userfaultfd prend en charge le mode erreur mineure. Dans ce mode, les messages dâerreur ne sont pas produits pour des erreurs majeures (oĂč les pages Ă©taient absentes), mais plutĂŽt pour des erreurs mineures oĂč une page existe dans le cache de page, mais oĂč les entrĂ©es de la table de pages ne sont pas encore prĂ©sentes. Lâutilisateur doit dâabord vĂ©rifier la disponibilitĂ© de cette fonctionnalitĂ© en utilisant lâioctl UFFDIO_API avec les bits de fonction appropriĂ©s avant dâutiliser cette fonctionnalité : UFFD_FEATURE_MINOR_HUGETLBFS depuis Linux 5.13 ou UFFD_FEATURE_MINOR_SHMEM depuis Linux 5.14.
Pour enregistrer avec le mode erreur mineure dâuserfaultfd, lâutilisateur doit initier lâioctl UFFDIO_REGISTER avec le mode UFFD_REGISTER_MODE_MINOR dĂ©fini.
Quand une erreur mineure survient, lâespace utilisateur recevra une notification dâerreur de page dont lâ uffd_msg.pagefault.flags aura lâattribut UFFD_PAGEFAULT_FLAG_MINOR dĂ©fini.
Pour rĂ©soudre une erreur de page mineure, le gestionnaire doit dĂ©cider si le contenu de la page existante doit ĂȘtre modifiĂ©e dâabord, ou non. Si câest le cas, cela doit ĂȘtre fait Ă son emplacement au moyen dâun second mappage non enregistrĂ© par userfaultfd vers la mĂȘme page de sauvegarde (par exemple en mappant deux fois le fichier shmem ou hugetlbfs). Une fois que la page est considĂ©rĂ©e « à jour », lâerreur peut ĂȘtre rĂ©solue en initiant un ioctl UFFDIO_CONTINUE qui installe les entrĂ©es de la table de pages et (par dĂ©faut) rĂ©veille le ou les threads en erreur.
Le mode erreur mineure ne prend en charge que la mĂ©moire sâappuyant sur hugetlbfs (depuis Linux 5.13) et sur shmem (depuis Linux 5.14).
Lire Ă partir de la structure userfaultfd
Chaque read (2) Ă partir du descripteur de fichier userfaultfd renvoie une ou plusieurs structures uffd_msg , chacune dâelles dĂ©crit un Ă©vĂ©nement dâerreur de page ou un Ă©vĂ©nement requis pour lâutilisation non coopĂ©rative dâuserfaultfd :
struct uffd_msg
{
__u8 event; /* Type dâĂ©vĂ©nement */
...
union {
struct {
__u64 flags; /* Attributs dĂ©crivant lâerreur */
__u64 address; /* Adresse fautive */
union {
__u32 ptid; /* ID du thread de lâerreur */
} feat;
} pagefault;
struct { /* Depuis Linux 4.11 */
__u32 ufd; /* Descripteur de ficher dâuserfault
du processus enfant */
} fork;
struct { /* Depuis Linux 4.11 */
__u64 from; /* Ancienne adresse de la zone remappée
*/
__u64 to; /* Nouvelle adresse de la zone remappée */
__u64 len; /* Taille originale du mappage */
} remap;
struct { /* Depuis Linux 4.11 */
__u64 start; /* Adresse de début de la zone
supprimée */
__u64 end; /* Adresse de fin de la zone supprimée */
} remove;
...
} arg;
/* Remplissage des champs omis */
} __packed;
Si plusieurs Ă©vĂ©nements sont disponibles et si le tampon fourni est suffisamment grand, read (2) renvoie autant dâĂ©vĂ©nements quâil en tient dans le tampon fourni. Si le tampon fourni Ă read (2) est plus petit que la taille de la structure uffd_msg , read (2) Ă©choue avec lâerreur EINVAL .
Les champs définis dans la structure uffd_msg sont les suivants :
|
event |
Le type dâĂ©vĂ©nement. Selon le type dâĂ©vĂ©nement, diffĂ©rents champs de lâunion arg reprĂ©sentent les dĂ©tails nĂ©cessaires au traitement de lâĂ©vĂ©nement. Les Ă©vĂ©nements qui ne sont pas des erreurs de page ne sont gĂ©nĂ©rĂ©s que quand la fonctionnalitĂ© appropriĂ©e est activĂ©e durant la connexion de lâAPI Ă lâ ioctl (2) UFFDIO_API . |
Les valeurs
suivantes peuvent apparaĂźtre dans le champ
event
:
UFFD_EVENT_PAGEFAULT
(depuis Linux 4.3)
Un Ă©vĂ©nement dâerreur de page. Les dĂ©tails de lâerreur de page sont disponibles dans le champ pagefault .
UFFD_EVENT_FORK (depuis Linux 4.11)
GĂ©nĂ©rĂ© lorsque le processus en erreur invoque fork (2) (ou clone (2) sans lâattribut CLONE_VM ). Les dĂ©tails de lâĂ©vĂ©nement sont disponibles dans le champ fork .
UFFD_EVENT_REMAP (depuis Linux 4.11)
GĂ©nĂ©rĂ© lorsque le processus en erreur invoque mremap (2). Les dĂ©tails de lâĂ©vĂ©nement sont disponibles dans le champ remap .
UFFD_EVENT_REMOVE (depuis Linux 4.11)
GĂ©nĂ©rĂ© lorsque le processus en erreur invoque madvise (2) avec les conseils MADV_DONTNEED ou MADV_REMOVE . Les dĂ©tails de lâĂ©vĂ©nement sont disponibles dans le champ remove .
UFFD_EVENT_UNMAP (depuis Linux 4.11)
GĂ©nĂ©rĂ© lorsque le processus en erreur supprime le mappage dâun intervalle de mĂ©moire soit explicitement avec munmap (2), soit implicitement durant lâexĂ©cution de mmap (2) ou mremap (2). Les dĂ©tails de lâĂ©vĂ©nement sont disponibles dans le champ remove .
pagefault.address
Lâadresse qui a dĂ©clenchĂ© lâerreur de page.
pagefault.flags
Un masque de bits qui
dĂ©crit lâĂ©vĂ©nement. Pour
UFFD_EVENT_PAGEFAULT
, les attributs suivants peuvent
apparaßtre :
UFFD_PAGEFAULT_FLAG_WP
Si cet attribut est dĂ©fini, alors lâerreur Ă©tait une erreur de protection en Ă©criture.
UFFD_PAGEFAULT_FLAG_MINOR
Si cet attribut est dĂ©fini, alors lâerreur Ă©tait une erreur mineure.
UFFD_PAGEFAULT_FLAG_WRITE
Si cet attribut est dĂ©fini, alors lâerreur Ă©tait une erreur dâĂ©criture.
Si ni UFFD_PAGEFAULT_FLAG_WP ni UFFD_PAGEFAULT_FLAG_MINOR ne sont dĂ©finis, lâerreur Ă©tait une erreur dâabsence.
pagefault.feat.pid
Lâidentifiant du thread qui a dĂ©clenchĂ© lâerreur de page.
fork.ufd
Le descripteur de fichier associĂ© Ă lâobjet userfault créé pour lâenfant créé par fork (2).
remap.from
Lâadresse dâorigine de la plage de mĂ©moire dont le mappage a Ă©tĂ© modifiĂ© en utilisant madvise (2).
remap.to
La nouvelle adresse de la plage de mémoire dont le mappage a été modifié en utilisant madvise (2).
remap.len
La taille dâorigine de la plage de mĂ©moire dont le mappage a Ă©tĂ© modifiĂ© en utilisant madvise (2).
remove.start
Lâadresse de dĂ©but de la plage de mĂ©moire qui a Ă©tĂ© libĂ©rĂ©e en utilisant madvise (2) ou dont le mappage a Ă©tĂ© supprimĂ©.
remove.end
Lâadresse terminale de la plage de mĂ©moire qui a Ă©tĂ© libĂ©rĂ©e en utilisant madvise (2) ou dont le mappage a Ă©tĂ© supprimĂ©.
read (2) sur un descripteur de fichier userfaultfd peut échouer pour les raisons suivantes :
|
EINVAL |
Lâobjet userfaultfd nâa pas encore Ă©tĂ© activĂ© avec lâopĂ©ration dâ ioctl (2) UFFDIO_API . |
Si lâattribut O_NONBLOCK est activĂ© dans la description de fichier ouvert associĂ©e, le descripteur de fichier userfaultfd peut ĂȘtre surveillĂ© avec poll (2), select (2) et epoll (7). Quand les Ă©vĂ©nements sont disponibles, le descripteur de fichier lâindique comme lisible. Si lâattribut O_NONBLOCK nâest pas activĂ©, alors poll (2) indique (toujours) que le fichier comme ayant une condition POLLERR et select (2) indique que le descripteur de fichier est Ă la fois accessible en lecture et en Ă©criture.
VALEUR RENVOYĂE
En cas de succĂšs, userfaultfd () renvoie un nouveau descripteur de fichier qui fait rĂ©fĂ©rence Ă lâobjet userfaultfd. En cas dâerreur, la fonction renvoie -1 et errno est dĂ©fini pour indiquer lâerreur.
ERREURS
|
EINVAL |
Une valeur non prise en compte a été spécifiée dans flags . |
||
|
EMFILE |
La limite par processus du nombre de descripteurs de fichier ouverts a été atteinte. |
||
|
ENFILE |
La limite du nombre total de fichiers ouverts pour le systÚme entier a été atteinte. |
||
|
ENOMEM |
La mĂ©moire disponible du noyau nâĂ©tait pas suffisante. |
EPERM (depuis Linux 5.2)
Lâappelant nâest pas privilĂ©giĂ© (il nâa pas la capacitĂ© CAP_SYS_PTRACE dans lâespace de noms initial) et /proc/sys/vm/unprivileged_userfaultfd a la valeur 0 .
STANDARDS
Linux.
HISTORIQUE
Linux 4.3.
La prise en charge des zones de mémoire hugetlbfs et partagée et des événements qui ne sont pas des erreurs de page a été ajoutée dans Linux 4.11
NOTES
Le mĂ©canisme dâuserfaultfd peut ĂȘtre utilisĂ© comme une alternative aux techniques traditionnelles de pagination de lâespace utilisateur basĂ©es sur lâutilisation du signal SIGSEGV et de mmap (2). Il peut aussi ĂȘtre utilisĂ© pour implĂ©menter la restauration en mode paresseux (« lazy restore ») pour les mĂ©canismes de la fonctionnalitĂ© de gel des applications (checkpoint/restore), aussi bien que la migration aprĂšs copie pour permettre une exĂ©cution (presque) ininterrompue lors du transfert de machines virtuelles et de conteneurs Linux dâun hĂŽte Ă un autre.
BOGUES
Si UFFD_FEATURE_EVENT_FORK est activĂ© et si un appel systĂšme issu de la famille de fork (2) est interrompu par un signal ou Ă©choue, un descripteur pĂ©rimĂ© dâuserfaultfd peut ĂȘtre créé. Dans ce cas, un faux UFFD_EVENT_FORK sera fourni au surveillant dâuserfaultfd.
EXEMPLES
Le programme ci-dessous dĂ©montre lâutilisation du mĂ©canisme userfaultfd. Le programme crĂ©e deux threads, un qui agit comme gestionnaire dâerreur de page pour le processus, pour les pages dans une rĂ©gion sans demande de page en utilisant mmap (2).
Le programme prend un argument en ligne de commande, qui est le nombre de pages qui seront créées dans un mappage dont les erreurs de pages seront gĂ©rĂ©es au moyen dâuserfaultfd. AprĂšs la crĂ©ation dâun objet userfaultfd, le programme crĂ©e alors un mappage privĂ© anonyme de la taille spĂ©cifiĂ©e et enregistre lâintervalle dâadresses de ce mappage en utilisant lâopĂ©ration dâ ioctl (2) UFFDIO_REGISTER . Le programme crĂ©e alors un second thread qui exĂ©cutera la tĂąche de gestion des erreurs de page.
Le thread principal parcourt les pages du mappage Ă la recherche des octets des pages successives. Comme il nây a pas eu encore dâaccĂšs aux pages, le premier accĂšs Ă un octet de chaque page dĂ©clenchera un Ă©vĂ©nement dâerreur de page sur le descripteur de fichier userfaultfd.
Chaque Ă©vĂ©nement dâerreur de page est gĂ©rĂ© par le second thread qui sâinstalle dans une boucle traitant lâentrĂ©e du descripteur de fichier userfaultfd. Ă chaque itĂ©ration de la boucle, le second thread appelle poll (2) pour vĂ©rifier lâĂ©tat du descripteur de fichier puis lit un Ă©vĂ©nement Ă partir de ce descripteur de fichier. Tout ce type dâĂ©vĂ©nements doit ĂȘtre un Ă©vĂ©nement UFFD_EVENT_PAGEFAULT que le thread traite en copiant un page de donnĂ©es dans la rĂ©gion en erreur en utilisant lâopĂ©ration dâ ioctl (2) UFFDIO_COPY .
La suite est un exemple de ce qui est observĂ© lors de lâexĂ©cution du programme :
$
./userfaultfd_demo 3
Address returned by mmap() = 0x7fd30106c000
fault_handler_thread():
poll() returns: nready = 1; POLLIN = 1; POLLERR = 0
UFFD_EVENT_PAGEFAULT event: flags = 0; address =
7fd30106c00f
(uffdio_copy.copy returned 4096)
Read address 0x7fd30106c00f in main(): A
Read address 0x7fd30106c40f in main(): A
Read address 0x7fd30106c80f in main(): A
Read address 0x7fd30106cc0f in main(): A
fault_handler_thread():
poll() returns: nready = 1; POLLIN = 1; POLLERR = 0
UFFD_EVENT_PAGEFAULT event: flags = 0; address =
7fd30106d00f
(uffdio_copy.copy returned 4096)
Read address 0x7fd30106d00f in main(): B
Read address 0x7fd30106d40f in main(): B
Read address 0x7fd30106d80f in main(): B
Read address 0x7fd30106dc0f in main(): B
fault_handler_thread():
poll() returns: nready = 1; POLLIN = 1; POLLERR = 0
UFFD_EVENT_PAGEFAULT event: flags = 0; address =
7fd30106e00f
(uffdio_copy.copy returned 4096)
Read address 0x7fd30106e00f in main(): C
Read address 0x7fd30106e40f in main(): C
Read address 0x7fd30106e80f in main(): C
Read address 0x7fd30106ec0f in main(): C
Source du programme
/*
userfaultfd_demo.c
Licensed under the GNU General Public License version 2 or
later.
*/
#define _GNU_SOURCE
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <linux/userfaultfd.h>
#include <poll.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/syscall.h>
#include <unistd.h>
static int page_size;
static void *
fault_handler_thread(void *arg)
{
int nready;
long uffd; /* descripteur du fichier userfaultfd */
ssize_t nread;
struct pollfd pollfd;
struct uffdio_copy uffdio_copy;
static int fault_cnt = 0; /* Nombres dâerreurs
déjà gérées */
static char *page = NULL;
static struct uffd_msg msg; /* DonnĂ©es lues Ă
partir de userfaultfd */
uffd = (long) arg;
/* Créer une page qui sera copiée dans la
région en erreur. */
if (page == NULL) {
page = mmap(NULL, page_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (page == MAP_FAILED)
err(EXIT_FAILURE, "mmap");
}
/* Boucle gérant les événements
entrants sur le descripteur
de fichier userfaultfd. */
for (;;) {
/* Voir ce que poll() nous dit sur lâuserfaultfd. */
pollfd.fd = uffd;
pollfd.events = POLLIN;
nready = poll(&pollfd, 1, -1);
if (nready == -1)
err(EXIT_FAILURE, "poll");
printf("\nfault_handler_thread():\n");
printf(" poll() returns: nready = %d; "
"POLLIN = %d; POLLERR = %d\n", nready,
(pollfd.revents & POLLIN) != 0,
(pollfd.revents & POLLERR) != 0);
/* Lire un événement à partir de
lâuserfaultfd. */
nread = read(uffd, &msg, sizeof(msg));
if (nread == 0) {
printf("EOF on userfaultfd!\n");
exit(EXIT_FAILURE);
}
if (nread == -1)
err(EXIT_FAILURE, "read");
/* Un seul type dâĂ©vĂ©nement est
attendu ; il faut vérifier
cette supposition. */
if (msg.event != UFFD_EVENT_PAGEFAULT) {
fprintf(stderr, "Unexpected event on
userfaultfd\n");
exit(EXIT_FAILURE);
}
/* Afficher une information sur
lâĂ©vĂ©nement erreur de page. */
printf(" UFFD_EVENT_PAGEFAULT event: ");
printf("flags = %"PRIx64"; ",
msg.arg.pagefault.flags);
printf("address = %"PRIx64"\n",
msg.arg.pagefault.address);
/* Copier la page sur laquelle pointe la
« page » dans la région
fautive. Varier le contenu copiĂ©, afin quâil
soit plus
évident que chaque erreur soit gérée
séparément. */
memset(page, 'A' + fault_cnt % 20, page_size);
fault_cnt++;
uffdio_copy.src = (unsigned long) page;
/* Il est nécessaire de gérer les erreurs de
page en
unités de pages(!). Aussi, il faut arrondir les
adresses fautives Ă la limite de page. */
uffdio_copy.dst = (unsigned long) msg.arg.pagefault.address
&
~(page_size - 1);
uffdio_copy.len = page_size;
uffdio_copy.mode = 0;
uffdio_copy.copy = 0;
if (ioctl(uffd, UFFDIO_COPY, &uffdio_copy) == -1)
err(EXIT_FAILURE, "ioctl-UFFDIO_COPY");
printf(" (uffdio_copy.copy returned
%"PRId64")\n",
uffdio_copy.copy);
}
}
int
main(int argc, char *argv[])
{
int s;
char c;
char *addr; /* Début de la région
gérée par userfaultfd */
long uffd; /* Descripteur de fichier userfaultfd */
size_t len, l; /* Taille de la région
gérée par userfaultfd */
pthread_t thr; /* ID du thread qui gĂšre les erreurs
de page */
struct uffdio_api uffdio_api;
struct uffdio_register uffdio_register;
if (argc != 2) {
fprintf(stderr, "Utilisation : %s num-pages\n",
argv[0]);
exit(EXIT_FAILURE);
}
page_size = sysconf(_SC_PAGE_SIZE);
len = strtoull(argv[1], NULL, 0) * page_size;
/* Créer et activer un objet userfaultfd. */
uffd = syscall(SYS_userfaultfd, O_CLOEXEC | O_NONBLOCK);
if (uffd == -1)
err(EXIT_FAILURE, "userfaultfd");
/* NOTE : Une connexion de fonction en deux étapes
est inutile ici,
dans la mesure oĂč lâexemple nâa besoin
dâaucune fonction
particuliĂšre.
Les programmes qui *agissent* doivent appeler UFFDIO_API
deux fois :
une fois avec « features = 0 » pour
détecter les fonctions prises en
charge par ce noyau, puis avec le sous-ensemble de fonctions
que le
programme veut vraiment activer. */
uffdio_api.api = UFFD_API;
uffdio_api.features = 0;
if (ioctl(uffd, UFFDIO_API, &uffdio_api) == -1)
err(EXIT_FAILURE, "ioctl-UFFDIO_API");
/* Créer un mappage anonyme privé. La
mémoire sera paginée
avec aucune demande â câest-Ă -dire, sans
ĂȘtre encore
allouée. Quand la mémoire sera
réellement utilisée,
elle sera allouĂ©e au moyen de lâuserfaultfd. */
addr = mmap(NULL, len, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (addr == MAP_FAILED)
err(EXIT_FAILURE, "mmap");
printf("Address returned by mmap() = %p\n", addr);
/* Enregistrer lâintervalle de mĂ©moire du
mappage qui vient dâĂȘtre
créé pour le traitement par lâobjet
userfaultfd. Dans mode,
suivre les pages manquantes (câest-Ă -dire, les
pages qui ne sont
pas encore fautives). */
uffdio_register.range.start = (unsigned long) addr;
uffdio_register.range.len = len;
uffdio_register.mode = UFFDIO_REGISTER_MODE_MISSING;
if (ioctl(uffd, UFFDIO_REGISTER, &uffdio_register) ==
-1)
err(EXIT_FAILURE, "ioctl-UFFDIO_REGISTER");
/* Créer un thread qui traitera les
événements userfaultfd. */
s = pthread_create(&thr, NULL, fault_handler_thread,
(void *) uffd);
if (s != 0) {
errc(EXIT_FAILURE, s, "pthread_create");
}
/* Le thread principal utilise la mémoire dans le
mappage,
utilisant des emplacements séparés de 1024
octets. Cela va
déclencher des événements userfaultfd
pour toutes les pages
dans la région. */
l = 0xf; /* Assurer que lâadresse fautive nâest
pas sur une
limite de page afin de vérifier que ce cas est
correctement géré dans le
fault_handling_thread(). */
while (l < len) {
c = addr[l];
printf("Read address %p in %s(): ", addr + l,
__func__);
printf("%c\n", c);
l += 1024;
usleep(100000); /* Ralentir un peu le traitement */
}
exit(EXIT_SUCCESS);
}
VOIR AUSSI
fcntl (2), ioctl (2), ioctl_userfaultfd (2), madvise (2), mmap (2)
Documentation/admin-guide/mm/userfaultfd.rst dans lâarborescence des sources du noyau Linux
TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>
Cette traduction est une documentation libre ; veuillez vous reporter Ă la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il nây a aucune RESPONSABILITĂ LĂGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .