Man page - fcntl64(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 fr pl ja ru deManual
fcntl
NOMBIBLIOTHĂQUE
SYNOPSIS
DESCRIPTION
Dupliquer un descripteur de fichier
Attributs du descripteur de fichier
Attribut dâĂ©tat du fichier
Verrouillages dâenregistrements coopĂ©ratifs
Verrouillages de description de fichier ouvert (non POSIX)
Verrouillage impératif
Verrouillages perdus
Gestion des signaux
Baux
Notification de modification de fichier et de répertoire (dnotify)
Changer la capacitĂ© dâun tube
Verrouillages de fichier
Indications de lecture/écriture de fichiers
VALEUR RENVOYĂE
ERREURS
STANDARDS
HISTORIQUE
NOTES
Verrouillages de fichier
Verrouillages dâenregistrements
Verrouillages dâenregistrements et NFS
BOGUES
F_SETFL
F_GETOWN
F_SETOWN
DĂ©tection dâinterblocage
Verrouillage impératif
VOIR AUSSI
TRADUCTION
NOM
fcntl - Manipuler un descripteur de fichier
BIBLIOTHĂQUE
BibliothĂšque C standard ( libc , -lc )
SYNOPSIS
#include <fcntl.h>
int fcntl(int fd , int op , ... /* arg */ );
DESCRIPTION
fcntl () permet de se livrer Ă diverses opĂ©rations sur le descripteur de fichier fd . LâopĂ©ration en question est dĂ©terminĂ©e par la valeur de lâargument op .
fcntl () accepte un troisiĂšme paramĂštre optionnel. La nĂ©cessitĂ© de fournir, ou pas, ce paramĂštre dĂ©pend de op . Le paramĂštre doit ĂȘtre du type indiquĂ© entre parenthĂšses aprĂšs chaque nom de commande op (dans la plupart des cas, le type requis est un int , et le paramĂštre est identifiĂ© en utilisant le nom arg ), ou void est indiquĂ© si le paramĂštre nâest pas nĂ©cessaire.
Certaines des opĂ©rations suivantes ne sont prises en charge quâĂ partir dâune version donnĂ©e du noyau Linux. La mĂ©thode prĂ©fĂ©rĂ©e pour vĂ©rifier si le noyau hĂŽte prend en charge une certaine opĂ©ration est dâinvoquer fcntl () avec la valeur de op voulue et ensuite de tester si lâappel a Ă©chouĂ© avec EINVAL , indiquant que le noyau ne reconnaĂźt pas cette valeur.
Dupliquer un descripteur de fichier
F_DUPFD ( int )
Dupliquer le descripteur de fichier fd en utilisant le plus petit numéro de descripteur de fichier libre supérieur ou égal à arg . Cela est différent de dup2 (2), qui utilise exactement le descripteur de fichier transmis.
En cas de réussite, le nouveau descripteur de fichier est renvoyé.
Consultez dup (2) pour plus dâinformations.
F_DUPFD_CLOEXEC ( int ; depuis Linux 2.6.24)
Comme pour F_DUPFD , mais positionner en plus lâattribut « close-on-exec » pour le descripteur de fichier dupliquĂ©. Indiquer cet attribut permet Ă un programme dâĂ©viter une opĂ©ration F_SETFD de fcntl () supplĂ©mentaire pour positionner lâattribut FD_CLOEXEC . Pour une explication sur ce en quoi cet attribut est utile, consultez la description de O_CLOEXEC dans open (2).
Attributs du descripteur de fichier
Les
opérations suivantes manipulent les attributs
associés à un descripteur de fichier.
Actuellement, un seul attribut est défini : il
sâagit de
FD_CLOEXEC
, lâattribut
« close-on-exec ». Si le bit
FD_CLOEXEC
est positionné, le descripteur de
fichier sera automatiquement fermĂ© lors dâun
execve
(2) réussi (si
execve
(2)
échoue, le descripteur de fichier reste ouvert). Si
le bit
FD_CLOEXEC
nâest pas positionnĂ©,
le descripteur de fichier restera ouvert Ă la fin
dâun
execve
(2).
F_GETFD
(
void
)
Renvoyer (en tant que résultat de la fonction) les attributs du descripteur de fichier ; arg est ignoré.
F_SETFD ( int )
Positionner les attributs du descripteur de fichier avec la valeur précisée par arg .
Dans un programme multithreadĂ©, lâutilisation simultanĂ©e dans un thread de fcntl () avec F_SETFD afin de dĂ©finir lâattribut « close-on-exec » ( FD_CLOEXEC ), et de fork (2) suivi de execve (2) dans un autre thread rend le programme vulnĂ©rable Ă une condition de concurrence pouvant provoquer la divulgation du descripteur de fichier dans le programme exĂ©cutĂ© dans le processus enfant. Consultez les dĂ©tails de lâattribut O_CLOEXEC dans open (2) qui dĂ©crivent une solution Ă ce problĂšme.
Attribut dâĂ©tat du fichier
Un descripteur de fichier dispose de certains attributs dâĂ©tat, initialisĂ©s par open (2) et Ă©ventuellement modifiĂ©s par fcntl (). Les descripteurs de fichier dupliquĂ©s (obtenus avec dup (2), fcntl (F_DUPFD), fork (2), etc.) concernent la mĂȘme description de fichier ouvert, et par consĂ©quent partagent les mĂȘmes attributs dâĂ©tat de fichier.
Les attributs et
leurs sémantiques sont décrits dans la page
open
(2).
F_GETFL
(
void
)
Renvoyer (en tant que rĂ©sultat de la fonction) les droits dâaccĂšs du fichier et les drapeaux dâĂ©tat du fichier ; arg est ignorĂ©.
F_SETFL ( int )
Positionner les drapeaux dâĂ©tat du fichier Ă la valeur indiquĂ©e par arg . Les drapeaux des droits dâaccĂšs au fichier ( O_RDONLY , O_WRONLY , O_RDWR ) et les attributs de crĂ©ation du fichier ( O_CREAT , O_EXCL , O_NOCTTY , O_TRUNC ) de arg sont ignorĂ©s. Sous Linux, cette opĂ©ration ne peut changer que les attributs O_APPEND , O_ASYNC , O_DIRECT , O_NOATIME et O_NONBLOCK . Modifier les attributs O_DSYNC et O_SYNC est impossible, consultez BOGUES ci-dessous.
Verrouillages dâenregistrements coopĂ©ratifs
Linux implĂ©mente les verrouillages dâenregistrements UNIX traditionnels (« associĂ©s au processus »), tels que normalisĂ©s par POSIX. Pour une alternative spĂ©cifique Ă Linux avec de meilleures sĂ©mantiques, consultez la discussion suivante sur les verrouillages de description de fichier ouvert.
F_SETLK , F_SETLKW et F_GETLK servent Ă gĂ©rer les verrouillages dâenregistrements (dâintervalle dâoctets, de segments de fichiers ou de zones de fichiers). Le troisiĂšme argument, lock , est un pointeur sur une structure qui a au moins les champs suivants (dans un ordre non indiquĂ©).
struct flock {
...
short l_type; /* Type de verrouillage : F_RDLCK,
F_WRLCK, F_UNLCK */
short l_whence; /* Interprétation de l_start:
SEEK_SET, SEEK_CUR, SEEK_END */
off_t l_start; /* Décalage de début du
verrouillage */
off_t l_len; /* Nombre dâoctets du verrouillage */
pid_t l_pid; /* PID du processus bloquant notre verrou
(mis par F_GETLK et F_OFD_GETLK seulement) */
...
};
Les champs l_whence , l_start et l_len de cette structure indiquent lâintervalle dâoctets Ă verrouiller. Des octets aprĂšs la fin du fichier peuvent ĂȘtre verrouillĂ©s, mais pas des octets avant le dĂ©but du fichier.
l_start est la position de dĂ©but du verrou, et est interprĂ©tĂ© de façon relative : au dĂ©but du fichier (si l_whence vaut SEEK_SET ) ; Ă la position actuelle dans le fichier (si l_whence vaut SEEK_CUR ) ; Ă la fin du fichier (si l_whence vaut SEEK_END ). Dans les deux derniers cas, l_start peut ĂȘtre un nombre nĂ©gatif, Ă partir du moment oĂč la position fournie ne pointe pas avant le dĂ©but du fichier.
l_len indique le nombre dâoctets Ă verrouiller. Si l_len est positif, alors lâintervalle Ă verrouiller couvre les octets Ă partir de l_start jusquâĂ l_start + l_len -1 (inclus). Indiquer 0 dans l_len a une signification particuliĂšre : cela verrouille tous les octets Ă partir de la position indiquĂ©e par l_whence et l_start jusquâĂ la fin du fichier, quelle que soit la taille que prendra le fichier.
POSIX.1-2001 permet (mais nâimpose pas) Ă une implĂ©mentation de prendre en charge des valeurs de l_len nĂ©gatives ; si l_len est nĂ©gatif, lâintervalle dĂ©crivant le verrou lock couvre les octets l_start + l_len jusquâĂ l_start -1 inclus. Cela est gĂ©rĂ© par Linux 2.4.21 et Linux 2.5.49.
Le champ
l_type
peut servir Ă placer un verrou en
lecture (
F_RDLCK
) ou en écriture
(
F_WRLCK
) sur un fichier. Un nombre quelconque de
processus peuvent tenir un verrou en lecture
(partagĂ©), sur une zone dâun fichier, mais un
seul peut avoir un verrou en écriture (exclusif). Un
verrou en écriture exclut tous les autres verrous,
aussi bien en lecture quâen Ă©criture. Un
processus donnĂ© ne peut tenir quâun seul verrou
sur une zone dâun fichier ; si un nouveau verrou
est appliquĂ© sur une zone dĂ©jĂ
verrouillée, alors le verrou précédent
est converti suivant le nouveau type. Ces conversions
pourraient entraßner le découpage, la
rĂ©duction ou lâextension du verrou existant si
le nombre dâoctets du nouveau verrou ne coĂŻncide
pas exactement avec celui de lâancien.
F_SETLK
(
struct flock *
)
AcquĂ©rir (si l_type vaut F_RDLCK ou F_WRLCK ) ou libĂ©rer (si l_type vaut F_UNLCK ) le verrou sur les octets indiquĂ©s par les champs l_whence , l_start , et l_len de lock . Si un conflit avec un verrou tenu par un autre processus existe, cet appel renvoie -1 et positionne errno aux valeurs EACCES ou EAGAIN (lâerreur renvoyĂ©e dans ce cas dĂ©pend des implĂ©mentations, donc POSIX impose aux applications portables de vĂ©rifier les deux erreurs).
F_SETLKW ( struct flock * )
Comme F_SETLK , mais attendre la libĂ©ration du verrou au lieu de renvoyer une erreur si un verrou en conflit est utilisĂ© sur le fichier. Si un signal est reçu pendant lâattente, lâappel est interrompu et renverra immĂ©diatement (aprĂšs le retour du gestionnaire de signaux) la valeur -1 . errno sera remplie avec la valeur EINTR ; consultez signal (7).
F_GETLK ( struct flock * )
En entrée dans cette routine, lock décrit un verrou que nous aimerions placer sur le fichier. Si le verrouillage est possible, fcntl () ne le fait pas, mais renvoie F_UNLCK dans le champ l_type de lock et laisse les autres champs de la structure inchangés.
Si un ou plusieurs verrouillages incompatibles empĂȘchaient lâaction, alors fcntl () renvoie des informations sur lâun de ces verrous dans les champs l_type , l_whence , l_start , et l_len de lock . Si le verrouillage en conflit est un verrouillage dâenregistrements UNIX traditionnels (« associĂ© au processus »), alors le champ l_pid est dĂ©fini avec le PID du processus dĂ©tenant ce verrou. Si le verrouillage en conflit est un verrouillage de description de fichier ouvert, alors l_pid est dĂ©fini Ă -1 . Remarquez que les renseignements renvoyĂ©s pourraient dĂ©jĂ ĂȘtre pĂ©rimĂ©s au moment ou lâappelant les inspecte.
Pour pouvoir placer un verrou en lecture, fd doit ĂȘtre ouvert au moins en lecture. Pour placer un verrou en Ă©criture, fd doit ĂȘtre ouvert en Ă©criture. Pour placer les deux types de verrous, il faut une ouverture en lecture/Ă©criture.
Lors du placement de verrous avec F_SETLKW , le noyau dĂ©tecte les interblocages ( deadlocks ), au moyen desquels au moins deux processus ont leurs demandes de verrouillage rĂ©ciproquement bloquĂ©es par des verrous dĂ©tenus par dâautres processus. Par exemple, supposons quâun processus A dĂ©tient un verrou dâĂ©criture sur lâoctet 100 dâun fichier et quâun processus B dĂ©tient un verrou dâĂ©criture sur lâoctet 200. Si les deux processus tentent alors de verrouiller lâoctet dĂ©jĂ verrouillĂ© par lâautre processus en utilisant F_SETLKW , alors, sans dĂ©tection dâinterblocage, les deux processus resteront bloquĂ©s indĂ©finiment. Quand le noyau dĂ©tecte ce type dâinterblocages, il force lâune des demandes bloquantes de verrouillage Ă Ă©chouer immĂ©diatement avec lâerreur EDEADLK ; une application qui rencontre ce type dâerreur devrait libĂ©rer certains de ses verrous pour permettre Ă dâautres applications de continuer avant de tenter dâobtenir de nouveau les verrous dont elle a besoin. Les interblocages circulaires, impliquant plus de deux processus, sont Ă©galement dĂ©tectĂ©s. Remarquez, cependant, que lâalgorithme de dĂ©tection dâinterblocages du noyau a ses limites, consultez BOGUES .
Outre la suppression par un F_UNLCK explicite, les verrous sont automatiquement libérés lorsque le processus se termine.
Les verrouillages dâenregistrements ne sont pas hĂ©ritĂ©s par les enfants lors dâun fork (2), mais sont conservĂ©s Ă la fin dâun execve (2).
Ă cause des tampons gĂ©rĂ©s par la bibliothĂšque stdio (3), lâutilisation des verrous dâenregistrements avec les routines de celle-ci est dĂ©conseillĂ©e. Utilisez plutĂŽt read (2) et write (2).
Les verrouillages dâenregistrements dĂ©crits prĂ©cĂ©demment sont associĂ©s au processus (contrairement aux verrouillages de description de fichier ouvert dĂ©crits ci-dessous). Cela a quelques consĂ©quences malheureuses.
|
- |
Si le processus ferme lâun des descripteurs se rĂ©fĂ©rant Ă un fichier, alors tous les verrous du processus sur ce fichier sont libĂ©rĂ©s, quels que soient le ou les descripteurs de fichier sur lesquels les verrous avaient Ă©tĂ© obtenus. Câest dangereux : cela signifie quâun processus peut perdre ses verrous sur un fichier comme /etc/passwd ou /etc/mtab si, pour une raison quelconque, une fonction de bibliothĂšque dĂ©cide dâouvrir, lire, puis refermer le mĂȘme fichier. |
||
|
- |
Les threads dâun processus partagent les verrous. Autrement dit, un programme multithreadĂ© ne pas pas utiliser de verrouillage dâenregistrement pour sâassurer que les threads ne vont pas accĂ©der simultanĂ©ment Ă la mĂȘme zone dâun fichier. |
Les verrouillages de description de fichier ouvert apportent une solution Ă ces deux problĂšmes.
Verrouillages de description de fichier ouvert (non POSIX)
Les verrouillages de description de fichier ouvert sont des verrouillages dâintervalle dâoctets coopĂ©ratifs dont le fonctionnement est identique en presque tout point aux verrouillages dâenregistrements traditionnels dĂ©crits prĂ©cĂ©demment. Ce type de verrouillage est spĂ©cifique Ă Linux et disponible depuis la version 3.15. Pour une explication des descriptions de fichier ouvert, consultez open (2).
La principale diffĂ©rence entre les deux types de verrouillage est que les verrouillages dâenregistrements traditionnels sont associĂ©s Ă un processus, alors que les verrouillages de description de fichier ouvert sont associĂ©s Ă la description de fichier ouvert sur laquelle ils sont obtenus, tout comme les verrous obtenus avec flock (2). Par consĂ©quent (et contrairement aux verrouillages dâenregistrements coopĂ©ratifs traditionnels), les verrouillages de description de fichier ouvert sont hĂ©ritĂ©s entre fork (2) (et clone (2) avec CLONE_FILES ) et ne sont automatiquement libĂ©rĂ©s que lors de la derniĂšre fermeture de la description de fichier ouvert, au lieu dâĂȘtre libĂ©rĂ©s lors de nâimporte quelle fermeture du fichier.
Les combinaisons de verrouillage de conflit (Ă savoir un verrouillage en lecture et en Ă©criture, ou deux verrouillages en Ă©criture), oĂč lâun est un verrouillage de description de fichier ouvert, et lâautre un verrouillage traditionnel dâenregistrement sont toujours en conflit mĂȘme lorsquâils sont acquis par le mĂȘme processus sur le mĂȘme descripteur de fichier.
Les verrouillages de description de fichier ouvert placĂ©s Ă lâaide de la mĂȘme description de fichier ouvert (câest-Ă -dire Ă lâaide du mĂȘme descripteur de fichier ou Ă lâaide dâun descripteur de fichier dupliquĂ© par fork (2), dup (2), fcntl (2) F_DUPFD , etc.) sont toujours compatibles : si un nouveau verrou est placĂ© sur une zone dĂ©jĂ verrouillĂ©e, alors le verrou existant est converti suivant le nouveau (ces conversions pourraient avoir pour consĂ©quence le dĂ©coupage, la rĂ©duction ou lâextension du verrou existant comme Ă©voquĂ© prĂ©cĂ©demment).
En revanche, les verrouillages de description de fichier ouvert peuvent ĂȘtre en conflit entre eux quand ils sont obtenus Ă lâaide de descriptions de fichier ouvert diffĂ©rentes. Ainsi, les threads dans un programme multithreadĂ© peuvent utiliser des verrouillages de description de fichier ouvert pour synchroniser lâaccĂšs Ă une zone de fichier si tous les threads rĂ©alisent leur propre appel dâ open (2) sur le fichier et utilisent les verrouillages Ă lâaide du descripteur de fichier qui en rĂ©sulte.
Comme avec les verrouillages coopĂ©ratifs traditionnels, le troisiĂšme argument de fcntl (), lock , est un pointeur vers une structure flock . Contrairement aux verrouillages dâenregistrements traditionnels, le champ l_pid de cette structure doit ĂȘtre mis Ă zĂ©ro lors de lâutilisation des opĂ©rations dĂ©crites ci-dessous.
Les
opĂ©rations permettant dâinteragir avec les
verrouillages de description de fichier ouvert sont
similaires à celles utilisées avec les
verrouillages traditionnels.
F_OFD_SETLK
(
struct flock *
)
Acquérir (si l_type vaut F_RDLCK ou F_WRLCK ) ou libérer (si l_type vaut F_UNLCK ) un verrou de description de fichier ouvert sur les octets indiqués par les champs l_whence , l_start et l_len de lock . Si un conflit avec un verrou détenu par un autre processus existe, cet appel renvoie -1 et définit errno à EAGAIN .
F_OFD_SETLKW ( struct flock * )
Comme F_OFD_SETLK , mais si un verrou en conflit existe sur le fichier attendre la libĂ©ration du verrou. Si un signal Ă intercepter est reçu pendant lâattente, lâappel est interrompu et renverra immĂ©diatement (aprĂšs renvoi du gestionnaire de signaux) la valeur -1 et errno sera dĂ©finie Ă EINTR ; consultez signal (7).
F_OFD_GETLK ( struct flock * )
En entrĂ©e dans cette routine, lock dĂ©crit un verrou de description de fichier ouvert que nous aimerions placer sur le fichier. Si le verrouillage est possible, fcntl () ne le fait pas, mais renvoie F_UNLCK dans le champ l_type de lock et laisse les autres champs de la structure inchangĂ©s. Si un ou plusieurs verrouillages incompatibles empĂȘchaient lâaction, alors des informations sur lâun de ces verrous sont renvoyĂ©s Ă lâaide de lock , comme dĂ©crit prĂ©cĂ©demment pour F_GETLK .
Dans lâimplĂ©mentation actuelle, aucune dĂ©tection dâinterblocage nâest rĂ©alisĂ©e pour les verrouillages de description de fichier ouvert (contrairement aux verrouillages dâenregistrements associĂ©s au processus, pour lesquels le noyau rĂ©alise une dĂ©tection dâinterblocage).
Verrouillage impératif
Attention : lâimplĂ©mentation Linux du verrouillage obligatoire nâest pas fiable. Voir BOGUES ci-dessous. Ă cause de ces bogues et du fait que cette fonction soit vue comme peu utilisĂ©e, depuis Linux 4.5, le verrouillage obligatoire est devenu une fonction facultative gĂ©rĂ©e par une option de configuration ( CONFIG_MANDATORY_FILE_LOCKING ). Cette fonctionnalitĂ© nâest plus prise en charge depuis Linux 5.15 et supĂ©rieur.
Par dĂ©faut, Ă la fois les verrouillages dâenregistrements traditionnels (associĂ©s au processus) et ceux de description de fichier ouvert sont coopĂ©ratifs. Les verrouillages coopĂ©ratifs ne sont pas imposĂ©s, donc ils ne fonctionnent quâentre processus qui les utilisent.
Les deux types de verrouillages peuvent aussi ĂȘtre impĂ©ratifs. Les verrous impĂ©ratifs sont appliquĂ©s Ă tous les processus. Si un processus tente dâeffectuer un accĂšs incompatible (par exemple read (2) ou write (2)) sur une zone dâun fichier qui a un verrou impĂ©ratif, le rĂ©sultat dĂ©pend de lâattribut O_NONBLOCK du descripteur de fichier. Sâil nâest pas activĂ©, lâappel systĂšme est bloquĂ© jusquâĂ ce que le verrou soit enlevĂ© ou converti en un mode compatible avec lâaccĂšs demandĂ©. Si lâattribut O_NONBLOCK est activĂ©, lâappel systĂšme Ă©choue avec lâerreur EAGAIN .
Pour utiliser des verrous impĂ©ratifs, ce type de verrouillage doit ĂȘtre activĂ© sur le systĂšme de fichiers contenant le fichier Ă verrouiller (en utilisant lâoption « -o mand » de mount (8)), ou lâattribut MS_MANDLOCK de mount (2). Le verrouillage impĂ©ratif est activĂ© pour un fichier en dĂ©sactivant la permission dâexĂ©cution du groupe et en activant le bit de permission Set-GID (consultez chmod (1) et chmod (2)).
Le verrouillage impĂ©ratif nâest pas dĂ©fini par POSIX. Certains autres systĂšmes permettent Ă©galement dâutiliser le verrouillage impĂ©ratif, mais la façon de lâactiver dĂ©pend des systĂšmes.
Verrouillages perdus
Quand un verrou dâobservation est obtenu sur un systĂšme de fichiers en rĂ©seau comme NFS, il est possible que le verrou soit perdu. Cela peut arriver suite Ă une action dâadministration sur le serveur ou Ă une partition du rĂ©seau (Ă savoir une perte de la connexion rĂ©seau avec le serveur) qui dure assez pour que le serveur pense que le client ne fonctionne plus.
Quand un systĂšme de fichiers dĂ©termine quâun verrou est perdu, les futures requĂȘtes read (2) ou write (2) peuvent Ă©chouer avec lâerreur EIO . Cette erreur persistera jusquâĂ la suppression du verrou ou la fermeture du descripteur de fichier. Depuis Linux 3.12, cela se produit au moins sur NFSv4 (y compris toutes les versions mineures).
Certaines versions dâUNIX envoient un signal ( SIGLOST ) dans ce cas. Linux ne dĂ©finit pas ce signal et il ne fournit pas de notification asynchrone de perte de verrous.
Gestion des signaux
F_GETOWN
,
F_SETOWN
,
F_GETOWN_EX
,
F_SETOWN_EX
,
F_GETSIG
et
F_SETSIG
servent Ă
gérer les signaux de disponibilité
dâentrĂ©e-sortie :
F_GETOWN
(
void
)
Renvoyer (comme rĂ©sultat de la fonction) le PID ou lâID de processus qui reçoit les signaux SIGIO et SIGURG pour les Ă©vĂ©nements concernant le descripteur de fichier fd . Les ID de processus sont renvoyĂ©s sous forme de valeurs positives ; les ID de groupe de processus sont renvoyĂ©s sous forme de valeurs nĂ©gatives (mais consultez la section BOGUES ci-dessous). arg est ignorĂ©.
F_SETOWN ( int )
DĂ©finir le PID ou lâidentifiant de processus qui recevront les signaux SIGIO et SIGURG pour les Ă©vĂ©nements concernant le descripteur fd . LâID de processus ou de groupe de processus cible est indiquĂ© dans arg . LâID dâun processus est indiquĂ© sous forme dâune valeur positive ; lâID dâun groupe de processus est formulĂ© en tant que valeur nĂ©gative. En gĂ©nĂ©ral, le processus appelant indique son propre PID comme argument ( arg est donc getpid (2)).
Outre la dĂ©finition du propriĂ©taire du descripteur de fichier, vous pourriez aussi activer la gĂ©nĂ©ration de signaux sur le descripteur de fichier. Cela se fait en utilisant lâopĂ©ration F_SETFL de fcntl () pour positionner le drapeau dâĂ©tat du fichier O_ASYNC sur le descripteur de fichier. Par consĂ©quent, un signal SIGIO est envoyĂ© dĂšs que lâentrĂ©e ou la sortie sont possibles sur ce descripteur. LâopĂ©ration F_SETSIG de fcntl () peut ĂȘtre utilisĂ©e pour recevoir un autre signal que SIGIO .
Lâenvoi dâun signal au processus (ou groupe de processus) propriĂ©taire indiquĂ© par F_SETOWN est conditionnĂ© par les mĂȘmes vĂ©rifications de permissions que lâenvoi dâun signal par kill (2), oĂč le processus envoyant le signal est celui qui utilise F_SETOWN (mais consultez la section BOGUES ci-dessous). Si cette vĂ©rification Ă©choue, le signal est ignorĂ© silencieusement. Note : lâopĂ©ration F_SETOWN enregistre les droits de lâappelant utilisĂ©s lors de lâappel fcntl () pour les vĂ©rifications de permissions.
Si le descripteur fd est un socket, F_SETOWN permet Ă©galement la rĂ©ception de signaux SIGURG lorsque des donnĂ©es hors-bande arrivent sur le socket. ( SIGURG est Ă©mis dans toutes les situations oĂč lâappel select (2) aurait indiquĂ© que le socket est dans une « situation exceptionnelle ».)
Le paragraphe ci-dessous Ă©tait pertinent Linux 2.6.x, jusquâĂ Linux 2.6.11 inclus :
Si une valeur non nulle est passĂ©e Ă F_SETSIG dans un processus multithreadĂ© utilisant une bibliothĂšque de threads gĂ©rant les groupes de threads (par exemple NPTL), une valeur positive passĂ©e Ă F_SETOWN a une signification diffĂ©rente : au lieu dâĂȘtre un PID identifiant tout un processus, il sâagit dâun identifiant de thread, rĂ©fĂ©rant Ă un thread spĂ©cifique dans un processus. Par consĂ©quent, il peut ĂȘtre nĂ©cessaire de passer Ă F_SETOWN la valeur renvoyĂ©e par gettid (2) plutĂŽt que celle renvoyĂ©e par getpid (2) pour obtenir les rĂ©sultats souhaitĂ©s si F_SETSIG est utilisĂ©. (Dans les implĂ©mentations actuelles des threads sous Linux, lâidentifiant de thread (TID) du thread principal est son identifiant de processus. Cela signifie quâun processus avec un seul thread peut utiliser indiffĂ©remment gettid (2) ou getpid (2).) Veuillez toutefois noter que les remarques de ce paragraphe ne sâappliquent pas au signal SIGURG gĂ©nĂ©rĂ© lorsque des donnĂ©es hors-bande sont disponibles sur un socket : ce signal est toujours envoyĂ© soit Ă un processus, soit Ă un groupe de processus, selon la valeur donnĂ©e Ă F_SETOWN .
Le comportement ci-dessus a été supprimé par accident dans Linux 2.6.12, et ne sera pas remis. à partir de Linux 2.6.32, utilisez F_SETOWN_EX pour envoyer les signaux SIGIO et SIGURG à un thread en particulier.
F_GETOWN_EX ( struct f_owner_ex * ) (depuis Linux 2.6.32)
Renvoyer les paramĂštres du propriĂ©taire du descripteur de fichier actuel, tels que dĂ©finis par une utilisation antĂ©riefure de F_SETOWN_EX . Lâinformation est renvoyĂ©e dans la structure pointĂ©e par arg , qui a la forme suivante :
struct
f_owner_ex {
int type;
pid_t pid;
};
Le champ type aura lâune des valeurs F_OWNER_TID , F_OWNER_PID ou F_OWNER_PGRP . Le champ pid est un entier positif reprĂ©sentant un identifiant de thread, de processus ou de groupe de processus. Consultez F_SETOWN_EX pour plus de dĂ©tails.
F_SETOWN_EX ( struct f_owner_ex * ) (depuis Linux 2.6.32)
Cette opération effectue
une tĂąche similaire Ă
F_SETOWN
. Elle
autorise lâappelant Ă diriger les signaux de
disponibilitĂ© dâentrĂ©es-sorties vers un
thread, un processus ou un groupe de processus
spĂ©cifiques. Lâappellant indique le
destinataire des signaux avec
arg
, qui est un
pointeur vers une structure
f_owner_ex
. Le champ
type
possĂšde lâune des valeurs
suivantes, qui définit comment
pid
est
interprété :
F_OWNER_TID
Envoyer le signal au thread dont lâidentifiant (la valeur renvoyĂ©e par un appel Ă clone (2) ou gettid (2)) est indiquĂ© par pid .
F_OWNER_PID
Envoyer le signal au processus dont lâidentifiant est indiquĂ© par pid .
F_OWNER_PGRP
Envoyer le signal au groupe de processus dont lâidentifiant est indiquĂ© par pid . Notez que, Ă la diffĂ©rence de F_SETOWN , un identifiant de groupe de processus est indiquĂ© ici avec une valeur positive.
F_GETSIG ( void )
Renvoyer (comme rĂ©sultat de la fonction) le numĂ©ro du signal Ă©mis lorsque lâentrĂ©e ou la sortie deviennent possibles. Une valeur nulle signifie lâĂ©mission de SIGIO . Toute autre valeur (y compris SIGIO ) prĂ©cise le signal Ă©mis, et des informations supplĂ©mentaires seront disponibles pour le gestionnaire sâil est installĂ© avec SA_SIGINFO . arg est ignorĂ©.
F_SETSIG ( int )
DĂ©finir le signal Ă Ă©mettre lorsque lâentrĂ©e ou la sortie deviennent possibles Ă la valeur fournie par arg . Une valeur nulle signifie lâĂ©mission de SIGIO . Toute autre valeur (y compris SIGIO ) prĂ©cise le signal Ă Ă©mettre, et des informations supplĂ©mentaires seront disponibles pour le gestionnaire sâil est installĂ© avec SA_SIGINFO .
En utilisant F_SETSIG avec une valeur non nulle, et en configurant SA_SIGINFO pour le gestionnaire (consultez sigaction (2)), des informations supplĂ©mentaires sur les Ă©vĂ©nements dâentrĂ©es-sorties sont fournies au gestionnaire Ă travers une structure siginfo_t . Si le champ si_code indique que la source est SI_SIGIO , le champ si_fd fournit le descripteur du fichier concernĂ© par lâĂ©vĂ©nement. Sinon, il nây a pas dâindication de descripteurs de fichier en attente, et il faut utiliser les mĂ©canismes habituels ( select (2), poll (2), read (2) avec O_NONBLOCK configurĂ©, etc.) pour dĂ©terminer quels descripteurs de fichier sont disponibles pour les entrĂ©es-sorties.
Remarquez que le descripteur de fichier fourni dans si_fd est celui indiquĂ© lors de lâopĂ©ration F_SETSIG . Cela peut provoquer un effet de bord inhabituel. Si le descripteur de fichier est dupliquĂ© ( dup (2) ou Ă©quivalent), et si le descripteur de fichier dâorigine est fermĂ©, alors des Ă©vĂ©nements E/S continueront Ă ĂȘtre Ă©mis mais le champ si_fd contiendra le numĂ©ro du descripteur de fichier Ă prĂ©sent fermĂ©.
En sĂ©lectionnant un signal temps rĂ©el (valeur >= SIGRTMIN ), de multiples Ă©vĂ©nements dâentrĂ©es-sorties peuvent ĂȘtre mĂ©morisĂ©s avec le mĂȘme numĂ©ro (la mĂ©morisation dĂ©pend de la mĂ©moire disponible). Des informations supplĂ©mentaires sont disponibles, comme ci-dessus, si SA_SIGINFO est configurĂ© pour le gestionnaire.
Notez que Linux impose une limite sur le nombre de signaux temps rĂ©el qui peuvent ĂȘtre mis en attente pour un processus (consultez getrlimit (2) et signal (7)), et si cette limite est atteinte, le noyau change de comportement et envoie SIGIO , et ce signal est dĂ©livrĂ© au processus entier plutĂŽt quâau thread spĂ©cifique.
En utilisant ces mĂ©canismes, un programme peut implĂ©menter des entrĂ©es-sorties totalement asynchrones, la plupart du temps sans avoir besoin dâinvoquer select (2) ou poll (2).
Lâutilisation de O_ASYNC est spĂ©cifique Ă BSD et Linux. La seule utilisation de F_GETOWN et F_SETOWN spĂ©cifiĂ©e dans POSIX.1 est en conjonction avec lâutilisation du signal SIGURG sur les sockets (POSIX ne spĂ©cifie pas le signal SIGIO ). F_GETOWN_EX , F_SETOWN_EX , F_GETSIG et F_SETSIG sont spĂ©cifiques Ă Linux. POSIX dispose dâentrĂ©es-sorties asynchrones et de la structure aio_sigevent pour effectuer la mĂȘme chose. Cela est Ă©galement disponible sous Linux dans la bibliothĂšque GNU C (glibc).
Baux
F_SETLEASE
et
F_GETLEASE
(depuis Linux 2.4) servent
respectivement à établir un nouveau bail et
Ă consulter le bail actuel sur le descripteur de
fichier indiqué par
fd
. (NdTÂ : je traduis
« lease » par
« bail », faute de terme plus
technique.) Le bail sur un fichier fournit un
mécanisme par lequel un processus détenteur du
bail est averti (par dĂ©livrance dâun signal)
lorsquâun autre processus (le « casseur de
bail ») essaie dâappeler
open
(2) ou
truncate
(2) sur le fichier vers lequel pointe ce
descripteur de fichier.
F_SETLEASE
(
int
)
Définir ou supprimer un
bail de fichier en fonction de la valeur fournie dans
lâentier
arg
:
F_RDLCK
Prendre un bail en lecture. Le processus appelant sera prĂ©venu lorsquâun autre processus ouvrira le fichier en Ă©criture ou le tronquera. Un bail en lecture ne peut ĂȘtre placĂ© que sur un descripteur de fichier ouvert en lecture seule.
F_WRLCK
Prendre un bail en Ă©criture. Le processus appelant sera prĂ©venu lorsquâun autre processus ouvrira le fichier (en lecture ou Ă©criture) ou le tronquera. Un bail en Ă©criture ne peut ĂȘtre pris sur le fichier que sâil nây a aucun autre descripteur de fichier ouvert pour le fichier.
F_UNLCK
Supprimer le bail sur un fichier.
Les baux sont associĂ©s Ă une description de fichier ouvert (consultez open (2)). Cela signifie que les descripteurs de fichier dupliquĂ©s (créés par, par exemple, fork (2) ou dup (2)) font rĂ©fĂ©rence au mĂȘme bail, et que ce bail peut ĂȘtre modifiĂ© ou rĂ©siliĂ© par nâimporte lequel de ces descripteurs. De plus, le bail est rĂ©siliĂ© soit par une opĂ©ration F_UNLCK explicite sur nâimporte lequel de ces descripteurs dupliquĂ©s, soit lorsque tous ces descripteurs ont Ă©tĂ© fermĂ©s.
Les baux ne
peuvent ĂȘtre pris que sur des fichiers normaux. Un
processus non privilégié ne peut prendre un
bail que sur un fichier dont lâUID (le
propriétaire) correspond au FS-UID du processus. Un
processus possédant la capacité
CAP_LEASE
peut prendre un bail sur nâimporte
quel fichier.
F_GETLEASE
(
void
)
Indiquer le type de bail possédé sur le descripteur de fichier fd en renvoyant F_RDLCK , F_WRLCK , ou F_UNLCK , signifiant respectivement que le processus appelant a un bail en lecture, écriture, ou pas de bail sur le fichier. arg est ignoré.
Lorsquâun processus (le « casseur de bail ») appelle open (2) ou truncate (2) en conflit avec un bail Ă©tabli par F_SETLEASE , lâappel systĂšme est bloquĂ© par le noyau et le noyau avertit le processus tenant le bail par lâenvoi dâun signal ( SIGIO par dĂ©faut). Le tenant du bail doit rĂ©pondre Ă ce signal en effectuant tout le nettoyage nĂ©cessaire pour que le fichier soit accessible par un autre processus (par exemple en vidant des tampons internes) et en supprimant ou dĂ©classant son bail. Un bail est supprimĂ© en appelant lâopĂ©ration F_SETLEASE avec arg valant F_UNLCK . Si le tenant du bail possĂšde un bail en Ă©criture sur le fichier et que le casseur de bail ouvre le fichier en lecture, il est suffisant que le tenant du bail dĂ©classe le bail en un bail en lecture. Cela est effectuĂ© en appelant lâopĂ©ration F_SETLEASE avec arg valant F_RDLCK .
Si le dĂ©tenteur du bail nâarrive pas Ă le dĂ©classer ou le supprimer avant le nombre de secondes indiquĂ© dans /proc/sys/fs/lease-break-time alors le noyau supprimera ou dĂ©classera de force le bail du processus qui le dĂ©tient.
DĂšs quâun cassage de bail a Ă©tĂ© commencĂ©, F_GETLEASE renvoie le type de bail cible ( F_RDLCK ou F_UNLCK , en fonction de ce qui serait compatible avec le casseur de bail) jusquâĂ ce que le dĂ©tenteur du bail ne le dĂ©classe ou le supprime volontairement, ou que le noyau ne soit forcĂ© Ă le faire aprĂšs expiration du dĂ©lai de cassage de bail.
DĂšs que le bail a Ă©tĂ©, de grĂ© ou de force, rĂ©siliĂ© ou dĂ©classĂ© et en supposant que le casseur de bail nâa pas dĂ©bloquĂ© son appel systĂšme, le noyau permet Ă ce dernier de se dĂ©rouler.
Si lâappel Ă open (2) ou truncate (2) du casseur de bail est interrompu par un gestionnaire de signal, lâappel systĂšme Ă©choue avec lâerreur EINTR , mais les autres Ă©tapes dĂ©crites ci-dessous se dĂ©roulent normalement. Si le casseur de bail est tuĂ© par un signal pendant que son appel systĂšme open (2) ou truncate (2) bloque, tout se dĂ©roule comme dĂ©crit ci-dessus. De mĂȘme, si le casseur de bail utilise lâoption O_NONBLOCK de open (2), lâappel retourne immĂ©diatement avec lâerreur EWOULDBLOCK , mais les autres Ă©tapes se dĂ©roulent comme dĂ©crit ci-dessus.
Le signal de notification par dĂ©faut pour le tenant du bail est SIGIO , mais on peut le modifier avec lâopĂ©ration F_SETSIG de la fonction fcntl (). Si une opĂ©ration F_SETSIG est rĂ©alisĂ©e (mĂȘme pour SIGIO ), et si le gestionnaire de signal est installĂ© avec SA_SIGINFO , alors il recevra une structure siginfo_t en second argument, et le champ si_fd contiendra le descripteur de fichier du bail oĂč il y a eu une tentative dâaccĂšs par un autre processus. (Cela sert si le processus tient des baux sur plusieurs fichiers.)
Notification de modification de fichier et de répertoire (dnotify)
F_NOTIFY ( int )
(Depuis Linux 2.4) Fournir un
avertissement lorsque le répertoire correspondant
Ă
fd
ou lâun des fichiers quâil
contient est modifié. Les événements
à notifier sont précisés dans
arg
, sous forme de masque regroupant par un OU
binaire zéro, une ou plusieurs des constantes
suivantes :
DN_ACCESS
AccĂšs Ă un fichier ( read (2), pread (2), readv (2) et similaires)
DN_MODIFY
Modification dâun fichier ( write (2), pwrite (2), writev (2), truncate (2), ftruncate (2) et similaires).
DN_CREATE
CrĂ©ation dâun fichier ( open (2), creat (2), mknod (2), mkdir (2), link (2), symlink (2), rename (2) dans ce rĂ©pertoire).
DN_DELETE
Suppression dâun fichier ( unlink (2), rename (2) dans un autre rĂ©pertoire, rmdir (2)).
DN_RENAME
Un fichier a Ă©tĂ© renommĂ© dans le mĂȘme rĂ©pertoire ( rename (2)).
DN_ATTRIB
Les attributs dâun fichier ont Ă©tĂ© modifiĂ©s ( chown (2), chmod (2), utime (2), utimensat (2) et similaires).
(Afin dâobtenir ces dĂ©finitions, la macro _GNU_SOURCE doit ĂȘtre dĂ©finie avant dâinclure tout fichier dâen-tĂȘte).
Les notifications de rĂ©pertoire sont habituellement uniques, et lâapplication doit rĂ©enregistrer une demande pour les notifications ultĂ©rieures. Inversement, si DN_MULTISHOT est incluse dans arg , les notifications resteront en effet jusquâĂ une demande explicite de suppression.
Une sĂ©rie de F_NOTIFY sont cumulĂ©s, les Ă©vĂ©nements dĂ©crits dans arg Ă©tant ajoutĂ©s Ă lâensemble des Ă©vĂ©nements dĂ©jĂ surveillĂ©s. Pour supprimer les notifications de tous les Ă©vĂ©nements, il faut invoquer F_NOTIFY avec arg valant 0 .
La notification se produit par lâoccurrence dâun signal. Le signal par dĂ©faut est SIGIO , mais on peut le changer avec lâopĂ©ration F_SETSIG de fcntl () (remarquez que SIGIO est un des signaux standards sans file dâattente ; basculer vers lâutilisation dâun signal temps rĂ©el signifie que plusieurs notifications peuvent ĂȘtre mises en attente dans le processus). Dans ce cas, le gestionnaire de signal reçoit une structure siginfo_t en second argument (si le gestionnaire a Ă©tĂ© installĂ© avec SA_SIGINFO ) dont le champ si_fd contient le descripteur du fichier qui a dĂ©clenchĂ© la notification (utile pour superviser plusieurs rĂ©pertoires).
En outre, avec DN_MULTISHOT , un signal temps rĂ©el devrait ĂȘtre utilisĂ© pour la notification pour pouvoir empiler les notifications successives.
Remarque : les nouvelles applications devraient utiliser lâinterface inotify (disponible depuis Linux 2.6.13), qui fournit une bien meilleure interface pour obtenir des notifications dâĂ©vĂ©nements sur le systĂšme de fichiers. Consultez inotify (7).
Changer la capacitĂ© dâun tube
F_SETPIPE_SZ ( int ; depuis Linux 2.6.35)
Changer la capacitĂ© du tube rĂ©fĂ©rencĂ© par fd pour contenir au moins arg octets. Un processus non privilĂ©giĂ© peut ajuster la capacitĂ© dâun tube Ă toute valeur comprise entre la taille de page du systĂšme et la limite dĂ©finie dans /proc/sys/fs/pipe-max-size (consultez proc (5)). Les tentatives pour dĂ©finir la capacitĂ© du tube en dessous de la taille de page sont silencieusement arrondies Ă la taille de page. Les tentatives dâun processus non privilĂ©giĂ© pour dĂ©finir la capacitĂ© du tube au dessus de /proc/sys/fs/pipe-max-size renvoie lâerreur EPERM ; un processus privilĂ©giĂ© ( CAP_SYS_RESOURCE ) peut passer outre cette limite.
Lors de lâaffectation dâun tampon Ă un tube, le noyau peut utiliser une capacitĂ© supĂ©rieure Ă arg , si câest plus pratique pour lâimplĂ©mentation (dans lâimplĂ©mentation actuelle, lâaffectation se fait sur le prochain multiple de la taille de la page supĂ©rieur Ă la puissance de deux de la taille indiquĂ©e). La capacitĂ© actuelle (en octets) dĂ©finie est renvoyĂ©e en tant que rĂ©sultat de la fonction.
Essayer de dĂ©finir une capacitĂ© de tube plus petite que la taille de lâespace du tampon actuellement utilisĂ© pour stocker des donnĂ©es aboutit Ă lâerreur EBUSY .
Remarquez quâĂ cause de la maniĂšre dont les pages du tampon du tube sont utilisĂ©es quand des donnĂ©es sont Ă©crites dans le tube, le nombre dâoctets qui peuvent ĂȘtre Ă©crits peut ĂȘtre infĂ©rieur Ă la taille nominale, selon la taille des Ă©critures.
F_GETPIPE_SZ ( void ; depuis Linux 2.6.35)
Renvoyer (comme résultat de la fonction) la capacité du tube référencé par fd .
Verrouillages de fichier
Les verrous de fichier limitent le jeu dâopĂ©rations autorisĂ©es sur un fichier donnĂ©. Pour chaque verrou positionnĂ© sur un fichier, un ensemble spĂ©cifique dâopĂ©rations Ă©chouera sur le fichier avec EPERM Ă partir de maintenant. Le fichier est dit verrouillĂ© (sealed). Le jeu de verrous dĂ©pend du type de fichier et du systĂšme de fichiers sous-jacents. Pour un aperçu du verrouillage de fichiers, un point sur ses objectifs et des exemples de code, voir memfd_create (2).
Actuellement, les verrous de fichier ne peuvent ĂȘtre appliquĂ©s que sur un descripteur de fichier renvoyĂ© par memfd_create (2) (si MFD_ALLOW_SEALING est utilisĂ©). Sur dâautres systĂšmes de fichiers, toutes les opĂ©rations de fcntl () agissant sur les verrous renverront EINVAL .
Les verrous
constituent une propriĂ©tĂ© dâun
inĆud. Ainsi, tous les descripteurs de fichier ouverts
qui se rapportent au mĂȘme inĆud partagent le
mĂȘme jeu de verrous. En outre, les verrous ne peuvent
jamais ĂȘtre supprimĂ©s mais uniquement
ajoutés.
F_ADD_SEALS
(
int
; depuis Linux 3.17)
Ajouter les verrous donnĂ©s dans le paramĂštre arg du masque de bit Ă lâensemble de verrous de lâinĆud auquel se rapporte le descripteur de fichier fd . Les verrous ne peuvent pas ĂȘtre supprimĂ©s de nouveau. Une fois que cet appel rĂ©ussit, ils sont renforcĂ©s immĂ©diatement par le noyau. Si le jeu de verrous actuel comprend F_SEAL_SEAL (voir ci-dessous), cet appel sera rejetĂ© avec EPERM . Lâajout dâun verrou dĂ©jĂ dĂ©fini nâest pas opĂ©rationnel, si F_SEAL_SEAL nâest pas dĂ©jĂ positionnĂ©. Pour positionner un verrou, le descripteur de fichier fd doit ĂȘtre accessible en Ă©criture.
F_GET_SEALS ( void ; depuis Linux 3.17)
Renvoyer (en tant que rĂ©sultat de la fonction) le jeu de verrous actuel de lâinĆud auquel se rapporte fd . Si aucun verrou nâest positionnĂ©, 0 est renvoyĂ©. Si le fichier ne gĂšre pas les verrous, -1 est renvoyĂ© et errno est positionnĂ© sur EINVAL .
Les verrous
suivants sont disponibles :
F_SEAL_SEAL
Si ce verrou est positionnĂ©, tout appel suivant Ă fcntl () avec F_ADD_SEALS Ă©chouera avec lâerreur EPERM . Ce verrou empĂȘche donc toute modification du jeu de verrous lui-mĂȘme. Si le jeu de verrous initial du fichier comprend F_SEAL_SEAL , cela le rend en fait constant et verrouillĂ©.
F_SEAL_SHRINK
Si ce verrou est positionné, le fichier en question ne peut pas voir sa taille réduite. Cela concerne open (2) avec le drapeau O_TRUNC ainsi que truncate (2) et ftruncate (2). Ces appels échouent avec EPERM si vous essayez de réduire le fichier en question. Augmenter la taille reste possible.
F_SEAL_GROW
Si ce verrou est positionné, le fichier en question ne peut pas voir sa taille augmentée. Cela concerne write (2) aprÚs la fin du fichier, truncate (2), ftruncate (2) et fallocate (2). Ces appels échoueront avec EPERM si vous les utilisez pour augmenter la taille du fichier. Si vous la laissez stable ou la réduisez, ces appels fonctionneront comme prévu.
F_SEAL_WRITE
Si ce verrou est positionnĂ©, vous ne pouvez pas modifier le contenu du fichier. Remarquez que la rĂ©duction ou lâaugmentation de la taille du fichier restent possibles et autorisĂ©es. Ainsi, ce verrou sâutilise en principe avec un autre verrou. Il concerne write (2) et fallocate (2) (combinĂ© au drapeau FALLOC_FL_PUNCH_HOLE ). Ces appels Ă©choueront avec EPERM si ce verrou est positionnĂ©. De plus, les tentatives de crĂ©er de nouveaux tableaux de mĂ©moire (memory-mappings) accessibles en Ă©criture avec mmap (2) Ă©choueront Ă©galement avec EPERM .
Lâutilisation de lâopĂ©ration F_ADD_SEALS pour dĂ©finir le verrou F_SEAL_WRITE Ă©choue avec EBUSY si un tableau partagĂ© accessible en Ă©criture existe. De tels tableaux doivent ĂȘtre dĂ©sassociĂ©s avant dâajouter ce verrou. De plus, sâil existe des opĂ©rations dâE/S asynchrones ( io_submit (2)) en attente sur le fichier, toutes les Ă©critures postĂ©rieures seront ignorĂ©es.
F_SEAL_FUTURE_WRITE (depuis Linux 5.1)
Lâeffet de ce verrou est identique Ă F_SEAL_WRITE , mais le contenu du fichier peut encore ĂȘtre modifiĂ© avec des tableaux partagĂ©s accessibles en Ă©criture créés avant que le verrou ne soit positionnĂ©. Toute tentative de crĂ©er de nouveaux tableaux accessibles en Ă©criture sur le fichier avec mmap (2) Ă©chouera avec EPERM . De mĂȘme, une tentative dâĂ©criture dans le fichier avec write (2) Ă©chouera avec EPERM .
En utilisant ce verrou, un processus peut crĂ©er un tampon de mĂ©moire quâil peut continuer Ă modifier tout en le partageant sur une base de « lecture seule » avec dâautres processus.
Indications de lecture/écriture de fichiers
Les indications (hints) de durĂ©e dâĂ©criture peuvent ĂȘtre utilisĂ©es pour informer le noyau de la durĂ©e relative prĂ©vue des Ă©critures sur un inĆud ou Ă lâaide dâune description de fichier ouvert en particulier (voir open (2) pour une explication sur les descriptions de fichier ouvert). Dans ce contexte, le terme « durĂ©e dâĂ©criture » (write lifetime) signifie la durĂ©e prĂ©vue de vie des donnĂ©es sur le mĂ©dia avant dâĂȘtre remplacĂ©es ou Ă©crasĂ©es.
Une application peut utiliser les diffĂ©rentes valeurs de rĂ©fĂ©rence indiquĂ©es ci-dessous pour sĂ©parer les Ă©critures en diffĂ©rentes classes, pour que plusieurs utilisateurs ou applications fonctionnant sur un seul dorsal de stockage puissent agrĂ©ger leurs motifs E/S de maniĂšre cohĂ©rente. Cependant, il nâexiste pas de sĂ©mantique fonctionnelle impliquĂ©e par ces attributs et plusieurs classes E/S peuvent utiliser les valeurs de rĂ©fĂ©rence de durĂ©e dâĂ©criture de maniĂšre arbitraire, tant que celles-ci sont utilisĂ©es de maniĂšre cohĂ©rente.
Les
opĂ©rations suivantes peuvent ĂȘtre
appliquées au descripteur de fichier,
fd
:
F_GET_RW_HINT
(
uint64_t *
; depuis Linux
4.13)
Renvoie la valeur de rĂ©fĂ©rence (« hint ») de lecture/Ă©criture associĂ©e Ă lâinĆud sous-jacent auquel renvoie fd .
F_SET_RW_HINT ( uint64_t * ; depuis Linux 4.13)
DĂ©finit la valeur de rĂ©fĂ©rence de lecture/Ă©criture associĂ©e Ă lâinĆud sous-jacent auquel renvoie fd . Cette valeur de rĂ©fĂ©rence persiste soit jusquâĂ ĂȘtre explicitement modifiĂ©e, soit jusquâĂ ce que le systĂšme de fichiers sous-jacent ne soit dĂ©montĂ©.
F_GET_FILE_RW_HINT ( uint64_t * ; depuis Linux 4.13)
Renvoie la valeur de référence « hint » de lecture/écriture associée à la description de fichier ouvert à laquelle renvoie fd .
F_SET_FILE_RW_HINT ( uint64_t * ; depuis Linux 4.13)
Définit la valeur de référence de lecture/écriture associée à la description de fichier ouvert à laquelle se rapporte fd .
Si une description de fichier ouvert nâa pas de valeur de rĂ©fĂ©rence de lecture/Ă©criture assignĂ©e, elle devra utiliser la valeur affectĂ©e Ă lâinĆud sâil y en a une.
Les valeurs de
référence de lecture/écriture suivantes
sont applicables depuis Linux 4.13Â :
RWH_WRITE_LIFE_NOT_SET
Aucune valeur de rĂ©fĂ©rence en particulier nâa Ă©tĂ© dĂ©finie. Il sâagit de la valeur par dĂ©faut.
RWH_WRITE_LIFE_NONE
Aucune durĂ©e de vie spĂ©cifique Ă lâĂ©criture nâa Ă©tĂ© associĂ©e Ă ce fichier ou Ă cet inĆud.
RWH_WRITE_LIFE_SHORT
Les donnĂ©es Ă©crites dans cet inĆud ou via cette description de fichier ouvert doivent avoir une durĂ©e de vie courte.
RWH_WRITE_LIFE_MEDIUM
Les donnĂ©es Ă©crites dans cet inĆud ou via cette description de fichier ouvert doivent avoir une durĂ©e de vie supĂ©rieure Ă celle des donnĂ©es Ă©crites avec RWH_WRITE_LIFE_SHORT .
RWH_WRITE_LIFE_LONG
Les donnĂ©es Ă©crites dans cet inĆud ou via cette description de fichier ouvert doivent avoir une durĂ©e de vie supĂ©rieure Ă celle des donnĂ©es Ă©crites avec RWH_WRITE_LIFE_MEDIUM .
RWH_WRITE_LIFE_EXTREME
Les donnĂ©es Ă©crites dans cet inĆud ou via cette description de fichier ouvert doivent avoir une durĂ©e de vie supĂ©rieure Ă celle des donnĂ©es Ă©crites avec RWH_WRITE_LIFE_LONG .
Toutes les valeurs de rĂ©fĂ©rence spĂ©cifiques Ă lâĂ©criture sont relatives entre elles et aucun sens absolu individuel ne devrait leur ĂȘtre attribuĂ©.
VALEUR RENVOYĂE
Pour quâun
appel réussisse, le code de retour dépend de
lâopĂ©ration :
F_DUPFD
Le nouveau descripteur de fichier.
F_GETFD
Valeur des attributs du descripteur de fichier.
F_GETFL
Valeur des attributs dâĂ©tat du fichier.
F_GETLEASE
Le type de bail tenu sur le descripteur de fichier.
F_GETOWN
Valeur du propriétaire du descripteur de fichier.
F_GETSIG
La valeur du signal envoyĂ© lorsque la lecture ou lâĂ©criture deviennent possibles, ou zĂ©ro pour le comportement SIGIO traditionnel.
F_GETPIPE_SZ
F_SETPIPE_SZ
La capacité du tube.
F_GET_SEALS
Un masque de bit identifiant les verrous positionnĂ©s sur le inĆud auquel renvoie fd .
Toutes les autres opérations :
Zéro.
En cas dâerreur, la valeur de retour est -1 et errno est dĂ©finie pour prĂ©ciser lâerreur.
ERREURS
EACCES ou EAGAIN
LâopĂ©ration est interdite en raison de verrous tenus par dâautres processus.
|
EAGAIN |
LâopĂ©ration est impossible Ă cause dâune projection en mĂ©moire effectuĂ©e par un autre processus. |
||
|
EBADF |
fd nâest pas un descripteur de fichier ouvert |
||
|
EBADF |
op vaut F_SETLK ou F_SETLKW et les droits dâouverture sur le descripteur de fichier ne correspondent pas au type de verrou demandĂ©. |
||
|
EBUSY |
op vaut F_SETPIPE_SZ et la capacitĂ© du nouveau tube indiquĂ© dans arg est infĂ©rieure Ă la taille de lâespace du tampon actuellement utilisĂ© pour stocker les donnĂ©es dans le tube. |
||
|
EBUSY |
op vaut F_ADD_SEALS , arg inclut F_SEAL_WRITE et il existe un tableau partagé accessible en écriture sur le fichier auquel se rapporte fd . |
EDEADLK
Il a Ă©tĂ© dĂ©tectĂ© que lâopĂ©ration F_SETLKW spĂ©cifiĂ©e conduirait Ă un interblocage.
|
EFAULT |
lock se trouve en dehors de lâespace dâadressage. |
||
|
EINTR |
op vaut F_SETLKW ou F_OFD_SETLKW et lâopĂ©ration a Ă©tĂ© interrompue par un signal ; voir signal (7). |
||
|
EINTR |
op vaut F_GETLK , F_SETLK , F_OFD_GETLK ou F_OFD_SETLK et lâopĂ©ration a Ă©tĂ© interrompue par un signal avant la vĂ©rification ou lâacquisition du verrouillage. GĂ©nĂ©ralement, quand on verrouille un fichier distant (comme un verrou sur NFS), mais cela peut aussi arriver localement. |
||
|
EINVAL |
La valeur indiquĂ©e dans op nâest pas reconnue par ce noyau. |
||
|
EINVAL |
op vaut F_ADD_SEALS et arg inclut un bit de verrou non reconnu. |
||
|
EINVAL |
op vaut F_ADD_SEALS ou F_GET_SEALS et le systĂšme de fichiers contenant lâinĆud auquel se rapporte fd ne prend pas en charge les verrous. |
||
|
EINVAL |
op vaut F_DUPFD et arg est négatif ou supérieur à la valeur maximale permise (voir le point sur RLIMIT_NOFILE dans getrlimit (2)). |
||
|
EINVAL |
op vaut F_SETSIG et arg nâest pas un numĂ©ro de signal autorisĂ©. |
||
|
EINVAL |
op est F_OFD_SETLK , F_OFD_SETLKW ou F_OFD_GETLK , et l_pid nâa pas Ă©tĂ© dĂ©fini comme zĂ©ro. |
||
|
EMFILE |
op vaut F_DUPFD et la limite par processus du nombre de descripteurs de fichier ouverts a été atteinte. |
||
|
ENOLCK |
Trop de verrous sont ouverts, ou la table des verrous est pleine, ou le verrouillage distant (par exemple par NFS) a échoué. |
ENOTDIR
F_NOTIFY a été indiqué dans op , mais fd ne fait pas référence à un répertoire.
|
EPERM |
op vaut F_SETPIPE_SZ et la limite rigide ou souple du tube de lâutilisateur a Ă©tĂ© atteinte ; voir pipe (7). |
||
|
EPERM |
Essai dâeffacement de lâattribut O_APPEND sur un fichier, mais il est considĂ©rĂ© comme en-ajout-seulement. |
||
|
EPERM |
op valait F_ADD_SEALS , mais fd nâĂ©tait pas ouvert en Ă©criture ou le jeu de verrous actuel sur le fichier inclut dĂ©jĂ F_SEAL_SEAL . |
STANDARDS
POSIX.1-2008.
F_GETOWN_EX , F_SETOWN_EX , F_SETPIPE_SZ , F_GETPIPE_SZ , F_GETSIG , F_SETSIG , F_NOTIFY , F_GETLEASE et F_SETLEASE sont spécifiques à Linux. (Définissez la macro _GNU_SOURCE pour avoir ces définitions).
F_OFD_SETLK , F_OFD_SETLKW et F_OFD_GETLK sont spécifiques à Linux (et il faut définir _GNU_SOURCE pour obtenir leurs définitions), mais le travail est en cours pour les avoir dans la prochaine version de POSIX.1.
F_ADD_SEALS et F_GET_SEALS sont spécifiques à Linux.
HISTORIQUE
SVr4, 4.3BSD, POSIX.1-2001.
Seules les opérations F_DUPFD , F_GETFD , F_SETFD , F_GETFL , F_SETFL , F_GETLK , F_SETLK et F_SETLKW sont spécifiées dans POSIX.1-2001.
F_GETOWN et F_SETOWN sont spécifiées dans POSIX.1-2001 (pour activer ces définitions, vous devez définir soit _XOPEN_SOURCE à la valeur supérieure ou égale à 500, soit _POSIX_C_SOURCE à la valeur supérieure ou égale à 200809L).
F_DUPFD_CLOEXEC est spécifiée dans POSIX.1-2008 (pour activer cette définition, vous devez définir _POSIX_C_SOURCE avec une valeur supérieure ou égale à 200809L, ou _XOPEN_SOURCE avec une valeur supérieure ou égale à 700).
NOTES
Les erreurs renvoyĂ©es par dup2 (2) ne sont pas les mĂȘmes que celles renvoyĂ©es par F_DUPFD .
Verrouillages de fichier
Lâappel systĂšme fcntl () originel de Linux nâa pas Ă©tĂ© conçu pour gĂ©rer les positions (dans la structure flock ) dans des fichiers de trĂšs grosse taille. En consĂ©quence, Linux 2.4 a ajoutĂ© lâappel systĂšme fcntl64 (). Ce nouvel appel systĂšme utilise une structure diffĂ©rente de verrouillage de fichier, flock64 , ainsi que les opĂ©rations correspondantes F_GETLK64 , F_SETLK64 et F_SETLKW64 . Cependant, ces dĂ©tails peuvent ĂȘtre ignorĂ©s par les applications qui utilisent la glibc, car sa fonction fcntl () encapsule de maniĂšre transparente lâappel systĂšme le plus rĂ©cent disponible.
Verrouillages dâenregistrements
Depuis Linux 2.0, il nây a pas dâinteraction entre les types de verrous placĂ©s par flock (2) et fcntl ().
Plusieurs systĂšmes ont dâautres champs dans struct flock comme, par exemple, l_sysid (pour identifier la machine oĂč se trouve le verrou). Clairement, l_pid seul ne sera pas trĂšs utile si le processus dĂ©tenant le verrou sâexĂ©cute sur une autre machine ; sur Linux, bien que ce champ soit prĂ©sent sur certaines architectures (comme MIPS32), ce champ nâest pas utilisĂ©.
Lâappel systĂšme fcntl () originel de Linux nâa pas Ă©tĂ© conçu pour gĂ©rer les positions (dans la structure flock ) dans des fichiers de trĂšs grosse taille. En consĂ©quence, Linux 2.4 a ajoutĂ© lâappel systĂšme fcntl64 (). Ce nouvel appel systĂšme utilise une structure diffĂ©rente de verrouillage de fichier, flock64 , ainsi que les opĂ©rations correspondantes F_GETLK64 , F_SETLK64 et F_SETLKW64 . Cependant, ces dĂ©tails peuvent ĂȘtre ignorĂ©s par les applications qui utilisent la glibc, car sa fonction fcntl () encapsule de maniĂšre transparente lâappel systĂšme le plus rĂ©cent disponible.
Verrouillages dâenregistrements et NFS
Avant Linux 3.12, si un client NFSv4 perd le contact avec le serveur pendant un certain temps (dĂ©fini Ă plus de 90 secondes sans communication), il pourrait perdre puis obtenir un nouveau verrou sans mĂȘme en ĂȘtre informĂ©. (La pĂ©riode au bout de laquelle le contact est assumĂ© perdu est connue sous le nom de pĂ©riode de bail (« leasetime ») NFSv4. Sur un serveur NFS Linux, elle peut ĂȘtre dĂ©terminĂ©e en regardant /proc/fs/nfsd/nfsv4leasetime , qui exprime la pĂ©riode en seconde. La valeur par dĂ©faut pour ce fichier est 90.) Ce scĂ©nario a pour risque potentiel la corruption de donnĂ©es, puisquâun autre processus pourrait obtenir un verrou pendant la pĂ©riode intermĂ©diaire et rĂ©aliser des entrĂ©es et sorties de fichier.
Depuis Linux 3.12, si un client NFSv4 perd le contact avec le serveur, toutes les entrĂ©es et sorties du fichier par un processus qui « pense » dĂ©tenir un verrou Ă©choueront avant que le processus ne ferme et rouvre le fichier. Un paramĂštre du noyau, nfs.recover_lost_locks , peut ĂȘtre dĂ©fini Ă 1 pour obtenir le comportement prĂ©cĂ©dant (avant Linux 3.12), oĂč le client essayera de rĂ©cupĂ©rer les verrous perdus quand le contact avec le serveur est rĂ©tabli. Ă cause du risque associĂ© de corruption de donnĂ©es, la valeur par dĂ©faut de ce paramĂštre est 0 (dĂ©sactivĂ©).
BOGUES
F_SETFL
Il nâest pas possible dâutiliser F_SETFL pour modifier lâĂ©tat des attributs O_DSYNC et O_SYNC . Une tentative de modification de ces attributs sera simplement ignorĂ©e.
F_GETOWN
En raison dâune limitation des conventions dâappels systĂšme sur certaines architectures (en particulier i386), si F_GETOWN renvoie un identifiant de groupe de processus compris entre -1 et -4095, la valeur de retour est interprĂ©tĂ©e par glibc comme une erreur ; la valeur de retour de fcntl () sera -1 et errno contiendra lâidentifiant du groupe de processus (positif). LâopĂ©ration spĂ©cifique Ă Linux F_SETOWN_EX Ă©vite ce problĂšme. Depuis la glibc 2.11, glibc rend le problĂšme avec F_GETOWN invisible en implĂ©mentant F_GETOWN par-dessus F_GETOWN_EX .
F_SETOWN
Sous Linux 2.4 et prĂ©cĂ©dents, lorsquâun processus non privilĂ©giĂ© utilise F_SETOWN pour indiquer le propriĂ©taire dâun socket, avec un identifiant de (groupe de) processus autre que celui de lâappelant, un bogue peut survenir. Dans ce cas, fcntl () peut renvoyer -1 , avec errno positionnĂ© Ă EPERM , mĂȘme si lâappelant a le droit dâenvoyer un signal Ă ce (groupe de) processus. En dĂ©pit de cette erreur, le propriĂ©taire du descripteur de fichier est positionnĂ©, et les signaux seront envoyĂ©s au propriĂ©taire.
DĂ©tection dâinterblocage
Lâalgorithme de dĂ©tection dâinterblocage utilisĂ© par le noyau lors du traitement de demandes F_SETLKW peut produire Ă la fois des faux nĂ©gatifs (Ă©chec de dĂ©tection dâinterblocages, laissant un ensemble de processus interbloquĂ©s se bloquer indĂ©finiment) et des faux positifs (erreurs EDEADLK alors quâaucun interblocage nâexiste). Par exemple, le noyau limite la profondeur de verrouillage lors de sa recherche de dĂ©pendances Ă dix Ă©tapes, ce qui signifie que les chaĂźnes dâinterblocages circulaires dĂ©passant cette taille ne seront pas dĂ©tectĂ©es. De plus, le noyau pourrait faussement indiquer un interblocage lorsquâau moins deux processus créés en utilisant lâattribut CLONE_FILES de clone (2) placent des verrous qui semblent (au noyau) en conflit.
Verrouillage impératif
LâimplĂ©mentation Linux du verrouillage impĂ©ratif est sujette Ă des conditions de concurrence qui la rende non fiable : un appel Ă write (2) qui chevauche un verrou peut modifier les donnĂ©es aprĂšs que le verrouillage impĂ©ratif a Ă©tĂ© acquis ; un appel Ă read (2) qui chevauche un verrou peut dĂ©tecter des modifications sur des donnĂ©es qui ont Ă©tĂ© faites seulement aprĂšs quâun verrou en Ă©criture a Ă©tĂ© acquis. Des conditions de concurrence similaires existent entre les verrous impĂ©ratifs et mmap (2). Il est donc dĂ©conseillĂ© de faire confiance au verrouillage impĂ©ratif.
VOIR AUSSI
dup2 (2), flock (2), open (2), socket (2), lockf (3), capabilities (7), feature_test_macros (7), lslocks (8)
locks.txt , mandatory-locking.txt et dnotify.txt dans le rĂ©pertoire Documentation/filesystems/ des sources du noyau Linux. (Sur dâanciens noyaux, ces fichiers se trouvent dans le rĂ©pertoire Documentation/ et mandatory-locking.txt est appelĂ© mandatory.txt .)
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-Philippe MENGUAL <jpmengual@debian.org>
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 .