Man page - open(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 zh_TW zh_CN deManual
open
NOMBIBLIOTHĂQUE
SYNOPSIS
DESCRIPTION
creat()
openat()
openat2(2)
VALEUR RENVOYĂE
ERREURS
VERSIONS
E/S synchrones
Différences entre bibliothÚque C et noyau
STANDARDS
HISTORIQUE
NOTES
Description de fichier ouvert
NFS
FIFO
Mode dâaccĂšs au fichier
Justification des appels openat() et des API des descripteurs de fichier derépertoires
O_DIRECT
BOGUES
VOIR AUSSI
TRADUCTION
NOM
open, openat, creat - Ouvrir ou créer éventuellement un fichier
BIBLIOTHĂQUE
BibliothĂšque C standard ( libc , -lc )
SYNOPSIS
#include <fcntl.h>
int
open(const char *
pathname
, int
flags
, ...
/*
mode_t
mode
*/
);
int creat(const char * pathname , mode_t mode );
int
openat(int
dirfd
, const char
*
pathname
, int
flags
, ...
/*
mode_t
mode
*/
);
/*
Documenté à part, dans
openat2
(2)Â :
*/
int openat2(int
dirfd
, const char
*
pathname
,
const struct open_how *
how
, size_t
size
);
Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros (7)) :
openat
()Â :
Depuis la glibc 2.10 :
_POSIX_C_SOURCE >= 200809L
avant la glibc 2.10 :
_ATFILE_SOURCE
DESCRIPTION
Lâappel systĂšme open () ouvre le fichier indiquĂ© par pathname . Sâil nâexiste pas, il peut (si O_CREAT est indiquĂ© dans flags ) ĂȘtre créé par open ().
La valeur renvoyĂ©e par open () est un descripteur de fichier, un petit entier positif ou nul qui est un indice dâentrĂ©e dans la table de processus de descripteurs de fichiers ouverts. Le descripteur de fichier est ensuite utilisĂ© dans dâautres appels systĂšme ( read (2), write (2), lseek (2), fcntl (2), etc.) pour se rĂ©fĂ©rer au fichier ouvert. Le descripteur de fichier renvoyĂ© par un appel rĂ©ussi sera celui du plus petit numĂ©ro de descripteur de fichier non actuellement ouvert par le processus.
Par dĂ©faut, le nouveau descripteur de fichier est configurĂ© pour rester ouvert aprĂšs un appel Ă execve (2) (son attribut FD_CLOEXEC dĂ©crit dans fcntl (2) est initialement dĂ©sactivĂ©). Lâattribut O_CLOEXEC dĂ©crit ci-dessous permet de modifier ce comportement par dĂ©faut. La position dans le fichier est dĂ©finie au dĂ©but du fichier (consultez lseek (2)).
Un appel Ă open () crĂ©e une nouvelle description de fichier ouvert , une entrĂ©e dans la table de fichiers ouverts du systĂšme. Cette description de fichier ouvert enregistre la position dans le fichier et les attributs dâĂ©tat du fichier (voir ci-dessous). Un descripteur de fichier est une rĂ©fĂ©rence Ă une description de fichier ouvert ; cette rĂ©fĂ©rence nâest pas modifiĂ©e si pathname est ensuite supprimĂ© ou modifiĂ© pour faire rĂ©fĂ©rence Ă un autre fichier. Pour obtenir plus de dĂ©tails sur les descriptions de fichiers ouverts, consultez NOTES.
Le paramĂštre flags est lâun des Ă©lĂ©ments O_RDONLY , O_WRONLY ou O_RDWR qui rĂ©clament respectivement lâouverture du fichier en lecture seule, Ă©criture seule, ou lecture/Ă©criture.
De plus, zĂ©ro ou plusieurs attributs de crĂ©ation de fichier et attributs dâĂ©tat de fichier peuvent ĂȘtre indiquĂ©s dans flags avec un OU binaire. Les attributs de crĂ©ation de fichier sont O_CLOEXEC , O_CREAT , O_DIRECTORY , O_EXCL , O_NOCTTY , O_NOFOLLOW , O_TMPFILE et O_TRUNC . Les attributs dâĂ©tat de fichier sont tous les autres attributs indiquĂ©s ci-dessous. La distinction entre ces deux groupes est que les attributs dâĂ©tat de fichier modifient la sĂ©mantique de lâopĂ©ration dâouverture elle-mĂȘme, tandis que les attributs de lâĂ©tat du fichier modifient celle des opĂ©rations dâE/S qui suivent. Les attributs dâĂ©tat de fichier peuvent ĂȘtre lus et (dans certains cas) modifiĂ©s ; consultez fcntl (2) pour plus de prĂ©cisions.
La liste
complÚte des attributs de création et
dâĂ©tat de fichier est la suivante.
O_APPEND
Le fichier est ouvert en mode « ajout ». Avant chaque write (2), la tĂȘte de lecture/Ă©criture est placĂ©e Ă la fin du fichier comme avec lseek (2). La modification de la position dans le fichier et lâopĂ©ration dâĂ©criture sont effectuĂ©es sous forme dâĂ©tape atomique unique.
Il y a un risque dâendommager le fichier lorsque O_APPEND est utilisĂ©, sur un systĂšme de fichiers NFS, si plusieurs processus tentent dâajouter des donnĂ©es simultanĂ©ment au mĂȘme fichier. Ceci est dĂ» au fait que NFS ne gĂšre pas lâopĂ©ration dâajout de donnĂ©es dans un fichier, aussi le noyau du client est obligĂ© de la simuler, ce qui est impossible sans concurrence des tĂąches.
O_ASYNC
DĂ©clencher un signal ( SIGIO par dĂ©faut, mais peut ĂȘtre changĂ© via fcntl (2)) lorsque la lecture ou lâĂ©criture deviennent possibles sur ce descripteur. Ceci nâest possible que pour les terminaux, pseudoterminaux, sockets et (depuis Linux 2.6) tubes et FIFO. Consultez fcntl (2) pour plus de dĂ©tails. Consultez aussi BOGUES ci-dessous.
O_CLOEXEC (depuis Linux 2.6.23)
Activer lâattribut « close-on-exec » pour le nouveau descripteur de fichier. En prĂ©cisant cet attribut, on Ă©vite au programme dâavoir Ă utiliser les opĂ©rations F_SETFD de fcntl (2) pour positionner lâattribut FD_CLOEXEC .
Notez que le recours Ă cet attribut est indispensable pour certains programmes multithreadĂ©s. En effet, lâutilisation dâune opĂ©ration F_SETFD de fcntl (2) pour positionner lâattribut FD_CLOEXEC ne suffit pas Ă Ă©viter une situation dâaccĂšs concurrents si un thread ouvre un descripteur de fichier et tente dâactiver lâattribut « close-on-exec » au moyen de fcntl (2) au moment oĂč un autre thread exĂ©cute fork (2) suivi de execve (2). Selon lâordre dans lequel ces opĂ©rations sâexĂ©cutent, cette concurrence peut aboutir Ă ce que le descripteur de fichier renvoyĂ© par open () soit involontairement mis Ă disposition du programme exĂ©cutĂ© par le processus enfant créé par fork (2). (Ce type de concurrence est en principe possible pour tout appel systĂšme qui crĂ©e un descripteur de fichier dont lâattribut « close-on-exec » est actif ; certains appels systĂšme de Linux offrent des Ă©quivalents de lâattribut O_CLOEXEC pour rĂ©gler ce problĂšme.)
O_CREAT
Si pathname nâexiste pas, le crĂ©er en tant que fichier normal.
Le propriĂ©taire (identifiant utilisateur) du nouveau fichier est positionnĂ© sur lâidentifiant de lâutilisateur effectif du processus.
Le groupe (identifiant de groupe) propriĂ©taire du nouveau fichier est soit positionnĂ© sur lâidentifiant du groupe effectif du processus (dans la sĂ©mantique de System V), soit sur celui du rĂ©pertoire parent (dans la sĂ©mantique de BSD). Sur Linux, le comportement varie selon que le positionnement du bit set-group-ID sur le rĂ©pertoire parent : sâil est positionnĂ©, la sĂ©mantique de BSD sâapplique, sinon câest celle de System V. Pour certains de fichiers, le comportement dĂ©pend aussi des options de montage bsdgroups et sysvgroups dĂ©crites dans mount (8).
Lâargument mode indique les bits du mode du fichier Ă appliquer lors de la crĂ©ation dâun nouveau fichier. Si ni O_CREAT , ni O_TMPFILE ne sont indiquĂ©s dans flags , mode est ignorĂ© (et peut ainsi ĂȘtre indiquĂ© en tant que 0 voire absent). Lâargument mode doit ĂȘtre fourni si O_CREAT ou O_TMPFILE est indiquĂ© dans flags ; sâil nâest pas indiquĂ©, des octets arbitraires de la pile sâappliqueront comme mode du fichier.
Le mode effectif est modifiĂ© par le umask du processus de maniĂšre classique : en lâabsence dâACL (liste de contrĂŽle dâaccĂšs) par dĂ©faut, les droits du fichier créé sont (mode & ~umask) .
Notez que mode ne sâapplique quâaux accĂšs ultĂ©rieurs au fichier nouvellement créé ; lâappel open () qui crĂ©e un fichier dont le mode est en lecture seule fournira quand mĂȘme un descripteur de fichier en lecture et Ă©criture.
Les constantes symboliques suivantes sont disponibles pour mode :
|
S_IRWXU |
00700 Lâutilisateur (propriĂ©taire du fichier) a les autorisations de lecture, Ă©criture, exĂ©cution. |
||
|
S_IRUSR |
00400 Lâutilisateur a lâautorisation de lecture. |
||
|
S_IWUSR |
00200 Lâutilisateur a lâautorisation dâĂ©criture. |
||
|
S_IXUSR |
00100 Lâutilisateur a lâautorisation dâexĂ©cution. |
||
|
S_IRWXG |
00070 Le groupe a les autorisations de lecture, écriture, exécution. |
||
|
S_IRGRP |
00040 Le groupe a lâautorisation de lecture. |
||
|
S_IWGRP |
00020 Le groupe a lâautorisation dâĂ©criture. |
||
|
S_IXGRP |
00010 Le groupe a lâautorisation dâexĂ©cution. |
||
|
S_IRWXO |
00007 Tout le monde a les autorisations de lecture, écriture, exécution. |
||
|
S_IROTH |
00004 Tout le monde a lâautorisation de lecture. |
||
|
S_IWOTH |
00002 Tout le monde a lâautorisation dâĂ©criture. |
||
|
S_IXOTH |
00001 Tout le monde a lâautorisation dâexĂ©cution. |
Selon POSIX, le positionnement des autres bits dans mode nâa pas dâeffet spĂ©cifiĂ©. Sur Linux, les bits suivants sont Ă©galement gĂ©rĂ©s dans mode :
|
S_ISUID |
0004000 bit set-user-ID. |
|||
|
S_ISGID |
0002000 bit set-group-ID (voir inode (7)). |
|||
|
S_ISVTX |
0001000 bit sticky (voir inode (7)). |
O_DIRECT (depuis Linux 2.4.10)
Essayer de minimiser les effets du cache dâentrĂ©e-sortie sur ce fichier. Cela dĂ©gradera en gĂ©nĂ©ral les performances, mais est utile dans des situations spĂ©ciales, comme lorsque les applications ont leur propre cache. Les entrĂ©es-sorties de fichier sont faites directement de et vers les tampons dâespace utilisateur. Lâajout de lâattribut O_DIRECT fait que les entrĂ©es-sorties sont synchrones ; en rĂ©alitĂ© un effort est fait pour rendre le transfert synchrone mais cela nâoffre pas la garantie fournie par lâattribut O_SYNC que les donnĂ©es et mĂ©tadonnĂ©es sont transfĂ©rĂ©es. Pour garantir des entrĂ©es-sorties synchrones, lâattribut O_SYNC doit ĂȘtre utilisĂ© en plus de lâattribut O_DIRECT . Consultez la section NOTES ci-dessous.
Une interface à la sémantique similaire (mais dépréciée) pour les périphériques blocs est décrite dans raw (8).
O_DIRECTORY
Si pathname nâest pas un rĂ©pertoire, lâouverture Ă©choue. Cet attribut fut ajoutĂ© dans Linux 2.1.126, pour Ă©viter des problĂšmes de dysfonctionnement si opendir (3) est invoquĂ© sur une FIFO ou un pĂ©riphĂ©rique Ă bande.
O_DSYNC
Les opĂ©rations dâĂ©criture dans le fichier se dĂ©rouleront selon les conditions dâexĂ©cution des opĂ©rations E/S synchrones avec garantie dâintĂ©gritĂ© des donnĂ©es .
Au moment oĂč write (2) (ou un appel similaire) renvoie une donnĂ©e, elle a Ă©tĂ© transmise au matĂ©riel sur lequel sâexĂ©cute lâappel, avec toutes les mĂ©tadonnĂ©es du fichier qui pourraient ĂȘtre nĂ©cessaires Ă la rĂ©cupĂ©ration de cette donnĂ©e (câest Ă dire comme si chaque appel Ă write (2) Ă©tait suivi dâun appel Ă fdatasync (2)). Consultez NOTES ci-dessous .
|
O_EXCL |
Sâassurer que cet appel crĂ©e le fichier : si cet attribut est spĂ©cifiĂ© en conjonction avec O_CREAT et si le fichier pathname existe dĂ©jĂ , open () Ă©chouera avec lâerreur EEXIST . |
Lorsque ces deux attributs sont spĂ©cifiĂ©s, les liens symboliques ne sont pas suivis : si pathname est un lien symbolique, open () Ă©chouera quel que soit lâendroit oĂč pointe le lien symbolique.
En gĂ©nĂ©ral, le comportement de O_EXCL est indĂ©terminĂ© sâil est utilisĂ© sans O_CREAT . Il existe une exception toutefois : Ă partir de Linux 2.6, O_EXCL peut ĂȘtre utilisĂ© sans O_CREAT si pathname fait rĂ©fĂ©rence Ă un pĂ©riphĂ©rique bloc. Si le pĂ©riphĂ©rique bloc est utilisĂ© par le systĂšme (par exemple, sâil est montĂ©), open () Ă©choue avec lâerreur EBUSY .
Sur les systĂšmes de fichiers NFS, O_EXCL nâest pris en charge quâavec la version NFSv3 ou ultĂ©rieure, sur les noyaux 2.6 ou plus rĂ©cents. Dans les environnements NFS oĂč la prise en charge dâ O_EXCL nâest pas fournie, les programmes qui ont besoin de cette fonctionnalitĂ© pour verrouiller des tĂąches risquent de rencontrer une concurrence critique (race condition). Les programmes portables qui veulent effectuer un verrouillage atomique de fichier en utilisant un fichier verrou et qui doivent Ă©viter la dĂ©pendance de la prise en charge NFS pour O_EXCL peuvent crĂ©er un fichier unique sur le mĂȘme systĂšme de fichiers (par exemple, avec le PID et le nom de lâhĂŽte), et utiliser link (2) pour crĂ©er un lien sur un fichier de verrouillage. Si link (2) renvoie 0 , le verrouillage est rĂ©ussi. Sinon, utiliser stat (2) sur ce fichier unique pour vĂ©rifier si le nombre de liens a augmentĂ© jusquâĂ 2, auquel cas le verrouillage est Ă©galement rĂ©ussi.
O_LARGEFILE
(LFS) Permettre dâouvrir des fichiers dont la taille ne peut pas ĂȘtre reprĂ©sentĂ©e dans un off_t (mais peut lâĂȘtre dans un off64_t ). La macro _LARGEFILE64_SOURCE doit ĂȘtre dĂ©finie (avant dâinclure tout fichier dâen-tĂȘte) pour obtenir cette dĂ©finition. DĂ©finir la macro _FILE_OFFSET_BITS Ă 64 est la mĂ©thode Ă favoriser pour accĂ©der Ă des grands fichiers sur des systĂšmes 32 bits, plutĂŽt que dâutiliser O_LARGEFILE (consultez feature_test_macros (7)).
O_NOATIME (depuis Linux 2.6.8)
Ne pas mettre Ă jour la date de dernier accĂšs au fichier (( st_atime dans lâinĆud) quand le fichier est read (2).
Cet attribut ne peut ĂȘtre utilisĂ© que si lâune des conditions suivantes est vraie :
|
- |
Lâidentifiant utilisateur effectif du fichier correspond Ă celui du propriĂ©taire du fichier. |
||
|
- |
Le processus appelant a la capacitĂ© CAP_FOWNER dans son espace de noms utilisateur et lâidentifiant utilisateur du propriĂ©taire du fichier a une projection dans lâespace de noms. |
Cet attribut est seulement conçu pour les programmes dâindexation et dâarchivage, pour lesquels il peut rĂ©duire significativement lâactivitĂ© du disque. Lâattribut peut ne pas ĂȘtre effectif sur tous les systĂšmes de fichiers. Par exemple, avec NFS, lâheure dâaccĂšs est mise Ă jour par le serveur.
O_NOCTTY
Si pathname correspond Ă un pĂ©riphĂ©rique de terminal â consultez tty (4) â, il ne deviendra pas le terminal contrĂŽlant le processus mĂȘme si celui-ci nâest attachĂ© Ă aucun autre terminal.
O_NOFOLLOW
Si le composant final (câest-Ă -dire, celui obtenu par basename) de pathname est un lien symbolique, lâouverture Ă©choue avec lâerreur ELOOP . Les liens symboliques dans les composants apparus plus tĂŽt dans le chemin seront encore suivis (remarquez que lâerreur ELOOP qui peut intervenir dans ce cas ne peut pas ĂȘtre distinguĂ©e de lâĂ©chec dâune ouverture Ă cause dâun trop grand nombre de liens symboliques lors de la rĂ©solution de composants dans le prĂ©fixe du chemin).
Cet attribut est une extension FreeBSD qui a été ajoutée dans Linux 2.1.126, puis normalisée dans POSIX.1-2008.
Voir aussi O_PATH ci-dessous.
O_NONBLOCK ou O_NDELAY
Si possible, le fichier est ouvert en mode « non-bloquant ». Ni la fonction open () ni aucune autre opĂ©ration dâE/S ultĂ©rieure sur le descripteur de fichier renvoyĂ© ne laissera le processus appelant en attente.
Remarquez que positionner cet attribut nâa pas dâeffet sur une opĂ©ration poll (2), select (2), epoll (7) et Ă©quivalentes, puisque ces interfaces informent simplement lâappelant si un descripteur de fichier est « ready », Ă savoir quâune opĂ©ration E/S effectuĂ©e sur le descripteur de fichier avec lâattribut O_NONBLOCK clear ne se bloquerait pas.
Remarquez que cet attribut nâa aucun effet sur les fichiers ordinaires et les pĂ©riphĂ©riques de bloc ; câest-Ă -dire que les opĂ©rations dâE/S se bloqueront (briĂšvement) lorsquâune activitĂ© du pĂ©riphĂ©rique est nĂ©cessaire, indĂ©pendamment du positionnement de O_NONBLOCK . Comme la sĂ©mantique de O_NONBLOCK pourrait Ă©ventuellement ĂȘtre implĂ©mentĂ©e, les applications ne doivent pas dĂ©pendre dâun blocage comportemental quand elles indiquent cet attribut pour des fichiers ordinaires et des pĂ©riphĂ©riques de bloc.
Pour la manipulation des FIFO (tubes nommĂ©s), voir Ă©galement fifo (7). Pour une explication de lâeffet de O_NONBLOCK en conjonction avec les verrouillages impĂ©ratifs et les baux de fichiers, voir fcntl (2).
O_PATH (depuis Linux 2.6.39)
Obtenir un descripteur de fichier qui peut ĂȘtre utile de deux façons : pour indiquer la localisation dans lâarborescence du systĂšme de fichiers et pour effectuer des opĂ©rations exclusivement au niveau du descripteur de fichier. Le fichier nâest pas lui-mĂȘme ouvert et dâautres opĂ©rations sur le fichier (par exemple read (2), write (2), fchmod (2), fchown (2), fgetxattr (2), ioctl (2), mmap (2)) Ă©choueront en renvoyant lâerreur EBADF .
Les opĂ©rations suivantes peuvent ĂȘtre rĂ©alisĂ©es sur le descripteur de fichier obtenu :
|
- |
close (2). |
||
|
- |
fchdir (2), si le descripteur de fichier renvoie à un répertoire (depuis Linux 3.5). |
||
|
- |
fstat (2) (depuis Linux 3.6) |
||
|
- |
fstatfs (2) (depuis Linux 3.12) |
||
|
- |
Dupliquer le descripteur de fichier ( dup (2), fcntl (2), F_DUPFD , etc.). |
||
|
- |
Consulter et affecter les valeurs des attributs du descripteur de fichier ( fcntl (2), F_GETFD et F_SETFD ). |
||
|
- |
RĂ©cupĂ©rer les attributs dâĂ©tat de fichiers ouverts au moyen de lâopĂ©ration fcntl (2) F_GETFL : les attributs renvoyĂ©s comprendront le bit O_PATH . |
||
|
- |
Transmettre le descripteur de fichier comme lâargument dirfd de openat (2) et les autres appels systĂšme « *at() ». Cela comprend linkat (2) avec AT_EMPTY_PATH (ou via procfs au moyen de AT_SYMLINK_FOLLOW ) mĂȘme si le fichier nâest pas un rĂ©pertoire. |
||
|
- |
Transmettre le descripteur de fichier Ă un autre processus Ă lâaide dâun socket de domaine UNIX (consultez SCM_RIGHTS dans unix (7)). |
Lorsque O_PATH est prĂ©cisĂ© dans flags , seuls les bits O_CLOEXEC , O_DIRECTORY et O_NOFOLLOW de lâattribut sont pris en compte.
Lâouverture dâun fichier ou dâun rĂ©pertoire avec lâattribut O_PATH ne nĂ©cessite pas de droits sur lâobjet lui-mĂȘme (mais elle exige le droit dâexĂ©cution sur les rĂ©pertoires du prĂ©fixe de chemin). En fonction des opĂ©rations ultĂ©rieures, la vĂ©rification des droits du fichier adĂ©quats peut se faire (par exemple fchdir (2) exige le droit dâexĂ©cution sur le rĂ©pertoire auquel renvoie son argument de descripteur de fichier). Inversement, lâobtention de la rĂ©fĂ©rence Ă un objet de systĂšme de fichiers en lâouvrant par lâattribut O_RDONLY exige que lâappelant ait le droit de lire lâobjet mĂȘme quand lâopĂ©ration ultĂ©rieure (par exemple, fchdir (2), fstat (2)) nâa pas besoin des droits de lecture sur lâobjet.
Si pathname est un lien symbolique et si lâattribut O_NOFOLLOW est prĂ©cisĂ©, alors lâappel renvoie le descripteur de fichier dâun lien symbolique. Ce descripteur de fichier peut ĂȘtre utilisĂ© comme lâargument dirfd lors dâappels aux fonctions fchownat (2), fstatat (2), linkat (2) et readlinkat (2) avec un chemin dâaccĂšs vide pour permettre Ă lâappel de sâexĂ©cuter sur le lien symbolique.
Si pathname renvoie Ă un point de montage automatique non encore effectuĂ©, donc aucun autre systĂšme de fichiers nây est montĂ©, alors lâappel renvoie un descripteur de fichier qui se rapporte au rĂ©pertoire de montage automatique sans effectuer de montage. fstatfs (2) peut alors ĂȘtre utilisĂ© pour dĂ©terminer sâil sâagit bien dâun point de montage automatique non non effectuĂ© ( .f_type == AUTOFS_SUPER_MAGIC ).
Une utilisation de O_PATH sur des fichiers ordinaires consiste Ă fournir lâĂ©quivalent de la fonctionnalitĂ© O_EXEC de POSIX.1. Cela nous permet dâouvrir un fichier sur lequel on a le droit dâexĂ©cution mais pas de lecture, puis dâexĂ©cuter ce fichier selon des Ă©tapes comme suit :
char
buf[PATH_MAX];
fd = open("un_programme", O_PATH);
snprintf(buf, PATH_MAX, "/proc/self/fd/%d", fd);
execl(buf, "un_programme", (char *) NULL);
Un descripteur de fichier O_PATH peut Ă©galement ĂȘtre fourni comme argument de fexecve (3).
|
O_SYNC |
Les opĂ©rations dâĂ©criture dans le fichier se dĂ©rouleront selon les conditions dâexĂ©cution des opĂ©rations E/S synchrones avec garantie dâintĂ©gritĂ© du fichier (contrairement Ă lâexĂ©cution des opĂ©rations E/S synchrones avec garantie dâintĂ©gritĂ© des donnĂ©es fournie par O_DSYNC .) |
Au moment oĂč write (2) (ou un appel similaire) renvoie une donnĂ©e, cette donnĂ©e et les mĂ©tadonnĂ©es associĂ©es au fichier ont Ă©tĂ© transmises au matĂ©riel sur lequel sâexĂ©cute lâappel (autrement dit, comme si chaque appel Ă write (2) Ă©tait suivi dâun appel Ă fsync (2)). Consultez NOTES ci-dessous .
O_TMPFILE (depuis Linux 3.11)
CrĂ©er un fichier temporaire sans nom. Lâargument pathname indique un rĂ©pertoire ; un inĆud sans nom sera créé dans le systĂšme de fichiers de ce rĂ©pertoire. Tout ce qui est Ă©crit dans le fichier rĂ©sultant sera perdu quand le dernier descripteur de fichier sera fermĂ©, Ă moins de donner un nom au fichier.
O_TMPFILE doit ĂȘtre indiquĂ© avec soit O_RDWR , soit O_WRONLY , et facultativement O_EXCL . Si O_EXCL nâest pas indiquĂ©, alors linkat (2) peut ĂȘtre utilisĂ© pour lier le fichier temporaire dans le systĂšme de fichiers, le rendant permanent, en utilisant du code comme :
char
path[PATH_MAX];
fd = open("/path/to/dir", O_TMPFILE | O_RDWR,
S_IRUSR | S_IWUSR);
/* E/S du fichier sur 'fd'... */
linkat(fd, "", AT_FDCWD,
"/path/for/file", AT_EMPTY_PATH);
/* Si lâappelant nâa pas la capacitĂ©
CAP_DAC_READ_SEARCH (nécessaire
pour utiliser AT_EMPTY_PATH avec linkat(2)) et sâil
existe un
systÚme de fichiers proc(5) monté,
lâappel linkat(2) ci-dessus peut
ĂȘtre remplacĂ© par :
snprintf(path, PATH_MAX, "/proc/self/fd/%d", fd);
linkat(AT_FDCWD, path, AT_FDCWD, "/path/for/file",
AT_SYMLINK_FOLLOW);
*/
Dans ce cas, lâargument mode dâ open () dĂ©termine le mode de droits du fichier, comme avec O_CREAT .
Indiquer O_EXCL en conjonction avec O_TMPFILE empĂȘche de lier un fichier temporaire dans le systĂšme de fichiers comme prĂ©cĂ©demment (remarquez que la signification de O_EXCL dans ce cas est diffĂ©rente de la signification habituelle de O_EXCL ).
Les deux principaux cas dâutilisation de O_TMPFILE sont prĂ©sentĂ©s ci-dessous :
|
- |
AmĂ©liorer la fonctionnalitĂ© tmpfile (3) : crĂ©ation de fichiers temporaires sans situation de compĂ©tition qui (1) sont automatiquement supprimĂ©s Ă la fermeture ; (2) ne peuvent jamais ĂȘtre atteints par nâimporte quel chemin ; (3) ne sont pas exposĂ©s aux attaques de lien symbolique ; et (4) ne nĂ©cessitent pas Ă lâappelant dâinventer des noms uniques. |
||
|
- |
CrĂ©er un fichier initialement invisible, qui est ensuite peuplĂ© de donnĂ©es et ajustĂ© aux attributs de systĂšme de fichiers adĂ©quats ( fchown (2), fchmod (2), fsetxattr (2), etc.) avant dâĂȘtre liĂ© de façon atomique dans le systĂšme de fichiers dans un Ă©tat complĂštement formĂ© (en utilisant linkat (2) comme dĂ©crit prĂ©cĂ©demment). |
O_TMPFILE nĂ©cessite une prise en charge par le systĂšme de fichiers sous-jacent. Seule une partie des systĂšmes de fichiers Linux fournit cette prise en charge. Dans lâimplĂ©mentation initiale, la prise en charge Ă©tait assurĂ©e pour les systĂšmes de fichiers ext2, ext3, ext4, UDF, Minix et tmpfs. La prise en charge dâautres systĂšmes de fichiers a ensuite Ă©tĂ© ajoutĂ©e ainsi : XFS (Linux 3.15) ; Btrfs (Linux 3.16) ; F2FS (Linux 3.16) ; et ubifs (Linux 4.9)
O_TRUNC
Si le fichier existe, est un fichier ordinaire et que le mode dâaccĂšs permet lâĂ©criture ( O_RDWR ou O_WRONLY ), il sera tronquĂ© Ă une longueur nulle. Si le fichier est une FIFO ou un pĂ©riphĂ©rique terminal, lâattribut O_TRUNC est ignorĂ©. Sinon, le comportement de O_TRUNC nâest pas prĂ©cisĂ©.
creat()
Lâappel creat () est Ă©quivalent Ă open () avec lâattribut flags Ă©gal Ă O_CREAT|O_WRONLY|O_TRUNC .
openat()
Lâappel systĂšme openat () fonctionne de la mĂȘme façon que open (), les diffĂ©rences Ă©tant dĂ©crites ici.
Lâargument dirfd est utilisĂ© avec lâargument pathname comme suit :
|
- |
Si le chemin donné dans pathname est absolu, dirfd est ignoré. |
||
|
- |
Si le chemin fourni dans pathname est un chemin relatif et si dirfd a la valeur spéciale AT_FDCWD , alors pathname est interprété par rapport au répertoire courant du processus appelant, comme dans open (). |
||
|
- |
Si pathname est un chemin relatif, il est interprĂ©tĂ© par rapport au rĂ©pertoire rĂ©fĂ©rencĂ© par le descripteur de fichier dirfd (plutĂŽt que par rapport au rĂ©pertoire courant du processus appelant, comme cela est fait par open () pour un chemin relatif). Dans ce cas, dirfd doit ĂȘtre un rĂ©pertoire qui a Ă©tĂ© ouvert en lecture ( O_RDONLY ) ou en utilisant lâattribut O_PATH . |
Si le chemin fourni dans pathname est un chemin relatif et si dirfd nâest pas un descripteur de fichier valable, il en rĂ©sulte une erreur ( EBADF ). (SpĂ©cifier un numĂ©ro de descripteur de fichier non valable dans dirfd peut ĂȘtre utilisĂ© comme moyen de sâassurer que pathname est absolu.)
openat2(2)
Lâappel systĂšme openat2 (2) est une extension de openat () et il fournit un ensemble supplĂ©mentaire aux fonctionnalitĂ©s de openat (). Il est documentĂ© Ă part dans openat2 (2).
VALEUR RENVOYĂE
open (), openat () et creat () renvoient le nouveau descripteur de fichier (un entier non nĂ©gatif) sâils rĂ©ussissent. En cas dâerreur, ou -1 est renvoyĂ© et errno est dĂ©fini pour indiquer lâerreur.
ERREURS
open (), openat () et creat () peuvent échouer avec les erreurs suivantes :
|
EACCES |
LâaccĂšs demandĂ© au fichier est interdit, ou la permission de parcours pour lâun des rĂ©pertoires du chemin pathname est refusĂ©e, ou le fichier nâexiste pas encore et le rĂ©pertoire parent ne permet pas lâĂ©criture. (Consultez aussi path_resolution (7).) |
||
|
EACCES |
Lorsque O_CREAT est indiquĂ©, le systcl protected_fifos ou protected_regular est activĂ©, le fichier existe dĂ©jĂ ou est une FIFO ou un fichier ordinaire, le propriĂ©taire du fichier nâest ni lâutilisateur actuel, ni celui du rĂ©pertoire qui le contient, et ce rĂ©pertoire est accessible en Ă©criture et en exĂ©cution pour tout le monde. Pour plus de dĂ©tails, consultez les descriptions de /proc/sys/fs/protected_fifos et de /proc/sys/fs/protected_regular dans proc_sys_fs (5). |
||
|
EBADF |
( openat ()) pathname est relatif mais dirfd nâest ni AT_FDCWD ni un descripteur de fichier valable. |
||
|
EBUSY |
O_EXCL était indiqué dans flags et pathname se rapporte à un périphérique bloc utilisé par le systÚme (par exemple, il est monté). |
||
|
EDQUOT |
Si O_CREAT est indiquĂ©, le fichier nâexiste pas et le quota de blocs de disque ou dâinĆuds de lâutilisateur sur le systĂšme de fichiers a Ă©tĂ© atteint. |
||
|
EEXIST |
pathname existe déjà et O_CREAT et O_EXCL ont été indiqués. |
||
|
EFAULT |
nom_chemin pointe en dehors de lâespace dâadressage accessible. |
||
|
EFBIG |
Consultez EOVERFLOW . |
||
|
EINTR |
Pendant quâil Ă©tait bloquĂ© en attente de lâouverture dâun pĂ©riphĂ©rique lent (par exemple, une FIFO ; consultez fifo (7)), lâappel a Ă©tĂ© interrompu par un gestionnaire de signal ; consultez signal (7). |
||
|
EINVAL |
Le systĂšme de fichiers ne gĂšre pas lâattribut O_DIRECT . Consultez NOTES pour de plus amples renseignements. |
||
|
EINVAL |
Valeur incorrecte dans flags . |
||
|
EINVAL |
O_TMPFILE a Ă©tĂ© indiquĂ© dans flags , mais ni O_WRONLY ni O_RDWR nâont Ă©tĂ© indiquĂ©s. |
||
|
EINVAL |
O_CREAT Ă©tait indiquĂ© dans flags et le composant final (« basename ») du pathname du nouveau fichier nâest pas valable (il contient par exemple des caractĂšres non autorisĂ©s par le systĂšme de fichiers sous-jacent). |
||
|
EINVAL |
Le composant final (« basename ») de pathname nâest pas valable (il contient, par exemple, des caractĂšres non autorisĂ©s par le systĂšme de fichiers sous-jacent). |
||
|
EISDIR |
Une écriture a été demandée alors que pathname correspond à un répertoire (en fait, O_WRONLY ou O_RDWR ont été déclarés). |
||
|
EISDIR |
pathname fait référence à un répertoire existant, O_TMPFILE et soit O_WRONLY , soit O_RDWR , ont été indiqués dans flags , mais cette version du noyau ne fournit pas la fonctionnalité O_TMPFILE . |
||
|
ELOOP |
Trop de liens symboliques ont été rencontrés en parcourant nom_chemin . |
||
|
ELOOP |
pathname était un lien symbolique, et flags indiquait O_NOFOLLOW mais pas O_PATH . |
||
|
EMFILE |
La limite par processus du nombre de descripteurs de fichiers ouverts a été atteinte (voir la description de RLIMIT_NOFILE dans getrlimit (2)). |
ENAMETOOLONG
nom_chemin est trop long.
|
ENFILE |
La limite du nombre total de fichiers ouverts pour le systÚme entier a été atteinte. |
||
|
ENODEV |
pathname correspond Ă un fichier spĂ©cial et il nây a pas de pĂ©riphĂ©rique correspondant. (Ceci est un bogue du noyau Linux ; dans cette situation, ENXIO devrait ĂȘtre renvoyĂ©.) |
||
|
ENOENT |
O_CREAT nâest pas positionnĂ© et le fichier nommĂ© nâexiste pas. |
||
|
ENOENT |
Un des rĂ©pertoires du chemin dâaccĂšs nom_chemin nâexiste pas ou est un lien symbolique pointant nulle part. |
||
|
ENOENT |
pathname fait référence à un répertoire inexistant, O_TMPFILE et soit O_WRONLY , soit O_RDWR , ont été indiqués dans flags , mais cette version du noyau ne fournit pas la fonctionnalité O_TMPFILE . |
||
|
ENOMEM |
Le fichier nommĂ© est une FIFO, mais la mĂ©moire du tampon de la FIFO ne peut pas ĂȘtre allouĂ©e car la limite dure par processus dâallocation de mĂ©moire pour des tubes (pipes) a Ă©tĂ© atteinte et lâappelant nâest pas privilĂ©gié ; voir pipe (7). |
||
|
ENOMEM |
La mĂ©moire disponible du noyau nâĂ©tait pas suffisante. |
||
|
ENOSPC |
pathname devrait ĂȘtre créé mais le pĂ©riphĂ©rique concernĂ© nâa plus assez de place pour un nouveau fichier. |
ENOTDIR
Un Ă©lĂ©ment du chemin dâaccĂšs utilisĂ© comme rĂ©pertoire dans pathname ne lâest pas, ou lâattribut O_DIRECTORY est utilisĂ© et pathname nâest pas un rĂ©pertoire.
ENOTDIR
( openat ()) pathname est un chemin relatif et le descripteur de fichier dirfd est associé à un fichier, pas à un répertoire.
|
ENXIO |
O_NONBLOCK | O_WRONLY est positionnĂ©, le fichier nommĂ© est une FIFO et le processus nâa pas cette FIFO ouverte en lecture. |
||
|
ENXIO |
Le fichier est un fichier spĂ©cial de pĂ©riphĂ©rique et il nâexiste aucun pĂ©riphĂ©rique correspondant. |
||
|
ENXIO |
Le fichier est un socket de domaine UNIX. |
EOPNOTSUPP
Le systĂšme de fichiers contenant pathname ne prend pas en charge O_TMPFILE .
EOVERFLOW
pathname fait rĂ©fĂ©rence Ă un fichier ordinaire qui est trop grand pour ĂȘtre ouvert. Cela arrive quand une application compilĂ©e sur une plate-forme 32 bits sans -D_FILE_OFFSET_BITS=64 essaie dâouvrir un fichier dont la taille dĂ©passe (2Ë31)-1 octets ; consultez Ă©galement O_LARGEFILE ci-dessus. Câest lâerreur spĂ©cifiĂ©e par POSIX.1 ; avant Linux 2.6.24, Linux fournissait lâerreur EFBIG dans ce cas.
|
EPERM |
Lâattribut O_NOATIME est indiquĂ©, mais lâUID effectif de lâappelant nâest pas celui du propriĂ©taire du fichier, et lâappelant nâest pas privilĂ©giĂ©. |
||
|
EPERM |
La lecture a été interrompue par un signal ; consultez fnctl (2). |
||
|
EROFS |
Un accÚs en écriture est demandé alors que pathname réside sur un systÚme de fichiers en lecture seule. |
ETXTBSY
Une écriture a été demandée alors que pathname correspond à un fichier exécutable actuellement utilisé.
ETXTBSY
pathname se rapporte Ă un fichier actuellement utilisĂ© comme fichier dâĂ©change et lâattribut O_TRUNC a Ă©tĂ© indiquĂ©.
ETXTBSY
pathname se rapporte à un fichier actuellement lu par le noyau (par exemple pour charger un module ou du micro-code), et un accÚs en écriture a été demandé.
EWOULDBLOCK
Lâattribut O_NONBLOCK est indiquĂ©, et un bail incompatible est dĂ©tenu sur le fichier (consultez fcntl (2)).
VERSIONS
Lâeffet (indĂ©fini) de O_RDONLY | O_TRUNC varie selon lâimplĂ©mentation. Sur de nombreux systĂšmes, le fichier est effectivement tronquĂ©.
E/S synchrones
Lâoption POSIX-1.2008 « E/S synchrones » dĂ©crit des variantes des E/S synchrones, ainsi que plusieurs attributs de open () permettant dâen contrĂŽler le comportement : O_SYNC , O_DSYNC et O_RSYNC . Sans chercher Ă savoir si une implĂ©mentation accepte cette option, elle doit au moins prendre en charge lâutilisation de O_SYNC pour les fichiers normaux.
Linux met en Ćuvre O_SYNC et O_DSYNC , mais pas O_RSYNC . De façon plus ou moins correcte, la glibc dĂ©finit O_RSYNC de façon Ă avoir la mĂȘme valeur que O_SYNC . ( O_RSYNC est dĂ©fini dans le fichier dâen-tĂȘte du noyau Linux <asm/fcntl.h> de HP PA-RISC, mais il nâest pas utilisĂ©).
O_SYNC fournit lâexĂ©cution dâE/S synchrones avec garantie dâintĂ©gritĂ© des fichiers , ce qui signifie que les opĂ©rations dâĂ©criture envoient les donnĂ©es et les mĂ©tadonnĂ©es associĂ©es au matĂ©riel. O_DSYNC fournit lâexĂ©cution dâE/S synchrones avec garantie dâintĂ©gritĂ© des donnĂ©es , ce qui signifie que les opĂ©rations dâĂ©criture envoient les donnĂ©es et les mĂ©tadonnĂ©es associĂ©es au matĂ©riel, mais en envoyant seulement les mises Ă jour des mĂ©tadonnĂ©es qui permettent dâassurer le bon dĂ©roulement dâune opĂ©ration de lecture ultĂ©rieure. LâexĂ©cution avec garantie dâintĂ©gritĂ© des donnĂ©es peut rĂ©duire le nombre dâaccĂšs au disque demandĂ©s par une application qui ne nĂ©cessite pas lâexĂ©cution avec garantie dâintĂ©gritĂ© des fichiers.
Pour comprendre la diffĂ©rence entre ces deux types dâexĂ©cution, imaginez deux extraits de mĂ©tadonnĂ©es dâun fichier : lâhorodatage de la derniĂšre modification ( st_mtime ) et la longueur du fichier. Toutes les opĂ©rations dâĂ©criture modifieront lâhorodatage de la derniĂšre modification, mais seules les Ă©critures en fin de fichier modifieront la longueur. Lâhorodatage de derniĂšre modification nâest pas nĂ©cessaire pour garantir une lecture correcte du fichier, contrairement Ă la longueur. Ainsi, O_DSYNC transmettrait seulement la mĂ©tadonnĂ©e relative Ă la longueur du fichier (quand O_SYNC y ajouterait lâhorodatage de derniĂšre modification).
Avant Linux 2.6.33, Linux mettait seulement en Ćuvre lâattribut O_SYNC de open (). Cependant, lorsque cet attribut Ă©tait indiquĂ©, la plupart des systĂšmes de fichiers fournissait des fonctionnalitĂ©s Ă©quivalentes Ă lâexĂ©cution des E/S synchrones avec garantie de lâintĂ©gritĂ© des donnĂ©es (autrement dit, O_SYNC Ă©tait de fait mis en Ćuvre comme O_DSYNC ).
A partir de Linux 2.6.33, une vĂ©ritable prise de charge de O_SYNC est fournie. Cependant, pour assurer la compatibilitĂ© ascendante binaire, O_DSYNC a Ă©tĂ© dĂ©fini avec la mĂȘme valeur que le O_SYNC « historique », et O_SYNC a Ă©tĂ© dĂ©fini comme un nouvel attribut (de deux bits) qui comprend lâattribut O_DSYNC . Ceci permet dâassurer que les applications compilĂ©es avec les nouveaux en-tĂȘtes auront au moins la sĂ©mantique de O_DSYNC avant Linux 2.6.33.
Différences entre bibliothÚque C et noyau
Depuis la glibc 2.26, la fonction enveloppe de la glibc de open () utilise lâappel systĂšme openat () au lieu de lâappel systĂšme open () du noyau. Pour certaines architectures, cela est aussi vrai avant la glibc 2.26.
STANDARDS
|
open () |
creat
()
openat
()
POSIX.1-2008.
openat2 (2) Linux.
Les attributs O_DIRECT , O_NOATIME , O_PATH et O_TMPFILE sont spĂ©cifiques Ă Linux. _GNU_SOURCE doit ĂȘtre dĂ©finie pour obtenir leurs dĂ©finitions.
Les attributs O_CLOEXEC , O_DIRECTORY et O_NOFOLLOW ne sont pas spĂ©cifiĂ©s dans POSIX.1-2001, mais le sont dans POSIX.1-2008. Depuis glibc 2.12, leurs dĂ©finitions peuvent ĂȘtre obtenues en dĂ©finissant soit _POSIX_C_SOURCE avec une valeur supĂ©rieure ou Ă©gale Ă 200809L, soit _XOPEN_SOURCE avec une valeur supĂ©rieure ou Ă©gale Ă 700. Dans glibc 2.11 et les versions prĂ©cĂ©dentes, les dĂ©finitions peuvent ĂȘtre obtenues en dĂ©finissant _GNU_SOURCE .
HISTORIQUE
|
open () |
creat ()
SVr4, 4.3BSD, POSIX.1-2001.
openat ()
POSIX.1-2008. Linux 2.6.16, glibc 2.4.
NOTES
Sous Linux, lâattribut O_NONBLOCK est parfois utilisĂ© pour indiquer quâon veut ouvrir mais pas nĂ©cessairement dans lâintention de lire ou dâĂ©crire. Il est typiquement utilisĂ© pour ouvrir des pĂ©riphĂ©riques dans le but de rĂ©cupĂ©rer un descripteur de fichier pour lâutiliser avec ioctl (2).
Notez que open () peut ouvrir des fichiers spéciaux mais creat () ne peut pas en créer, il faut utiliser mknod (2) à la place.
Si un fichier est créé, ses horodatages st_atime , st_ctime , st_mtime (respectivement heure de dernier accĂšs, de derniĂšre modification dâĂ©tat, et de derniĂšre modification ; consultez stat (2)) sont dĂ©finis Ă lâheure actuelle, ainsi que les champs st_ctime et st_mtime du rĂ©pertoire parent. Sinon, si le fichier est modifiĂ© Ă cause de lâattribut O_TRUNC , ses champs st_ctime et st_mtime sont remplis avec lâheure actuelle.
Les fichiers du rĂ©pertoire /proc/ pid /fd affichent les descripteurs de fichier ouverts du processus ayant lâidentifiant pid . Les fichiers du rĂ©pertoire /proc/ pid /fdinfo prĂ©sentent encore plus dâinformations sur ces descripteurs de fichier. Voir proc (5) pour plus de dĂ©tails sur ces deux rĂ©pertoires.
Le fichier dâen-tĂȘte <asm/fcntl.h> du noyau Linux ne dĂ©finit pas O_ASYNC ; son synonyme FASYNC (dĂ©rivĂ© de BSD) lâest en revanche.
Description de fichier ouvert
Le terme « description de fichier ouvert » correspond Ă la terminologie POSIX pour faire rĂ©fĂ©rence Ă des entrĂ©es dans la table des fichiers ouverts du systĂšme. Dans dâautres contextes, cet objet est Ă©galement appelĂ© « objet de fichier ouvert », « gestionnaire de fichier », « entrĂ©e de la table des fichiers ouverts » ou encore, dans le jargon des dĂ©veloppeurs du noyau, struct file .
Lorsquâun descripteur de fichiers est dupliquĂ© (au moyen de dup (2) ou dâun Ă©quivalent), la copie fait rĂ©fĂ©rence Ă la mĂȘme description de fichier ouvert que le descripteur de fichier dâorigine. Les deux descripteurs de fichier partagent donc la mĂȘme position dans le fichier et les mĂȘmes attributs dâĂ©tat. Un tel partage peut Ă©galement se produire entre deux processus : un processus enfant créé au moyen de fork (2) hĂ©rite des copies des descripteurs de fichier de ses parents, et ces copies pointent vers les mĂȘmes descriptions de fichier ouvert.
Chaque opĂ©ration open (2) sur un fichier crĂ©e une nouvelle description de fichier ouvert ; ainsi, il peut y avoir plusieurs descriptions de fichier ouvert correspondant Ă un inĆud de fichier.
Sur Linux, on peut utiliser KCMP_FILE de kcmp (2) pour tester si deux descripteurs de fichier (dans le mĂȘme processus ou dans deux processus diffĂ©rents) se rapportent Ă la mĂȘme description de fichier ouvert.
NFS
Plusieurs problĂšmes se posent avec le protocole NFS, concernant entre autres O_SYNC , et O_NDELAY .
Sur les systĂšmes de fichiers NFS, oĂč la correspondance dâUID est activĂ©e, open () peut renvoyer un descripteur de fichier alors quâune requĂȘte read (2) par exemple sera refusĂ©e avec le code dâerreur EACCES . En effet, le client a effectuĂ© open () en vĂ©rifiant les autorisations dâaccĂšs, mais la correspondance dâUID est calculĂ©e par le serveur au moment des requĂȘtes de lecture ou dâĂ©criture.
FIFO
Ouvrir les blocs de fin de FIFO en lecture et Ă©criture jusquâĂ ce que lâautre fin soit Ă©galement ouverte (par un autre processus ou un autre thread). Voir fifo (7) pour plus de dĂ©tails.
Mode dâaccĂšs au fichier
Contrairement aux autres valeurs qui peuvent ĂȘtre indiquĂ©es dans flags , les valeurs du mode dâaccĂšs O_RDONLY , O_WRONLY et O_RDWR ne sont pas des bits individuels. Ils dĂ©finissent lâordre des deux bits de poids faible de flags , et ont pour valeur respective 0, 1 et 2. En dâautres termes, lâassociation O_RDONLY | O_WRONLY est une erreur logique et nâa certainement pas la mĂȘme signification que O_RDWR .
Linux rĂ©serve le sens suivant au mode 3 dâaccĂšs spĂ©cial et non standard (en binaire, 11) de lâattribut : vĂ©rification des droits en lecture et Ă©criture du fichier, et renvoi dâun descripteur qui ne peut ĂȘtre utilisĂ© ni en lecture, ni en Ă©criture. Ce mode dâaccĂšs non standard est utilisĂ© par certains pilotes Linux afin de renvoyer un descripteur qui nâest destinĂ© quâĂ des opĂ©rations ioctl (2) propres aux pĂ©riphĂ©riques.
Justification des appels openat() et des API des descripteurs de fichier derépertoires
openat () et les autres appels systĂšme similaires, ainsi que les fonctions de bibliothĂšques qui reçoivent pour argument un descripteur de fichier de rĂ©pertoire (câest-Ă -dire, execveat (2), faccessat (2), fanotify_mark (2), fchmodat (2), fchownat (2), fspick (2), fstatat (2), futimesat (2), linkat (2), mkdirat (2), mknodat (2), mount_setattr (2), move_mount (2), name_to_handle_at (2), open_tree (2), openat2 (2), readlinkat (2), renameat (2), renameat2 (2), statx (2), symlinkat (2), unlinkat (2), utimensat (2), mkfifoat (3) et scandirat (3)) gĂšrent deux problĂšmes avec les anciennes interfaces. Lâexplication est ici donnĂ©e dans le contexte de lâappel openat (), mais elle est semblable pour les autres interfaces.
Tout dâabord, openat () permet Ă une application dâĂ©viter les problĂšmes dâaccĂšs concurrents lors de lâutilisation de open () pour ouvrir des fichiers dans des rĂ©pertoires autres que le rĂ©pertoire courant. Ces problĂšmes sont dus au fait que lâun des composants du chemin donnĂ© Ă open () peut ĂȘtre modifiĂ© parallĂšlement Ă lâappel open (). Supposons par exemple quâon veuille crĂ©er le fichier dir1/dir2/xxx.dep alors que le fichier dir1/dir2/xxx existe. Le problĂšme est quâentre la vĂ©rification de son existence et lâĂ©tape de crĂ©ation du fichier, dir1 ou dir2 (qui pourraient ĂȘtre des liens symboliques) pourraient ĂȘtre modifiĂ©s pour pointer vers un autre endroit. De tels problĂšmes peuvent ĂȘtre Ă©vitĂ©s en ouvrant un descripteur de fichier sur le rĂ©pertoire cible, puis en fournissant ce descripteur comme argument dirfd de (disons) fstatat (2) et openat (). Lâutilisation du descripteur de fichier dirfd a Ă©galement dâautres avantages :
|
- |
le descripteur de fichier est une rĂ©fĂ©rence stable au rĂ©pertoire, mĂȘme si le rĂ©pertoire est renommé ; |
||
|
- |
le descripteur de fichier ouvert empĂȘche le systĂšme de fichiers sous-jacent dâĂȘtre dĂ©montĂ© quand un processus dĂ©tient un rĂ©pertoire en cours de fonctionnement sur le systĂšme de fichiers. |
Enfin, openat () permet dâimplĂ©menter un « rĂ©pertoire courant » par thread, grĂące Ă des descripteurs de fichier maintenus par lâapplication. Cette fonctionnalitĂ© peut Ă©galement ĂȘtre obtenue en jouant avec /proc/self/fd/ dirfd, mais de façon moins efficace.
Lâargument dirfd de ces API peut ĂȘtre obtenu par lâutilisation de open () ou de openat () pour ouvrir un rĂ©pertoire (avec le drapeau O_RDONLY ou O_PATH ). Sinon, un tel descripteur de fichier peut ĂȘtre obtenu en appliquant un dirfd (3) au flux dâun rĂ©pertoire créé avec opendir (3).
Quand on donne aux API un argument dirfd de AT_FDCWD ou quâun chemin indiquĂ© est absolu, ils gĂšrent leur argument de chemin de la mĂȘme maniĂšre que les API conventionnelles correspondantes. Toutefois dans ce cas, plusieurs API ont un argument flags qui offre un accĂšs Ă cette fonctionnalitĂ© non disponible avec les interfaces conventionnelles correspondantes.
O_DIRECT
Lâattribut O_DIRECT peut imposer des restrictions dâalignement pour la longueur et lâadresse des tampons de lâespace utilisateur et des dĂ©calages de fichier pour les entrĂ©es-sorties. Sous Linux, les restrictions dâalignement varient en fonction du systĂšme de fichiers et de la version du noyau, et il peut aussi ne pas y en avoir. La manipulation des entrĂ©es-sorties O_DIRECT mal alignĂ©es varie aussi ; elles peuvent soit Ă©chouer avec lâerreur EINVAL soit se replier sur des entrĂ©es-sorties mises en tampon.
Depuis Linux 6.1, la prise en charge de O_DIRECT et les restrictions dâalignement pour un fichier peuvent ĂȘtre recherchĂ©es avec statx (2) en utilisant lâattribut STATX_DIOALIGN . La prise en charge de STATX_DIOALIGN varie selon le systĂšme de fichiers ; consultez statx (2).
Certains systĂšmes de fichiers fournissent leur propre interface pour rechercher les restrictions dâalignement de O_DIRECT , par exemple lâopĂ©ration XFS_IOC_DIOINFO de xfsctl (3). STATX_DIOALIGN devrait ĂȘtre utilisĂ© Ă la place quand il est disponible.
Si aucun de ces interfaces nâest disponible, alors la prise en charge directe des entrĂ©es-sorties et les restrictions dâalignement peuvent uniquement ĂȘtre prĂ©sumĂ©es Ă partir des caractĂ©ristiques connues du systĂšme de fichiers, du fichier individuel, des pĂ©riphĂ©riques de stockage sous-jacents et de la version du noyau. Dans Linux 2.4, la plupart des systĂšmes de fichiers basĂ©s sur des pĂ©riphĂ©riques bloc requiĂšrent que lâadresse du fichier et la longueur et lâadresse mĂ©moire de tous les segments dâentrĂ©es-sorties soient des multiples de la taille de bloc du systĂšme de fichiers (habituellement 4096 octets). Dans Linux 2.6.0, cela a Ă©tĂ© assoupli Ă la taille du bloc logique du pĂ©riphĂ©rique bloc (habituellement 512 octets). La taille de bloc logique dâun pĂ©riphĂ©rique bloc peut ĂȘtre dĂ©terminĂ©e avec lâopĂ©ration BLKSSZGET de ioctl (2) ou avec la commande shell suivante :
blockdev --getss
Les E/S O_DIRECT ne devraient jamais ĂȘtre exĂ©cutĂ©es en mĂȘme temps que lâappel systĂšme fork (2), si le tampon mĂ©moire est une projection privĂ©e (câest-Ă -dire nâimporte quelle projection en mĂ©moire créée avec lâattribut MAP_PRIVATE de mmap (2), y compris la mĂ©moire allouĂ©e sur le tas et les tampons allouĂ©s de façon statique). Toutes ces E/S, quâelles soient soumises par lâintermĂ©diaire dâune interface dâE/S asynchrone ou depuis un autre thread du processus, devraient ĂȘtre achevĂ©es avant lâappel de fork (2). En cas dâĂ©chec, les consĂ©quences pourraient ĂȘtre une corruption de mĂ©moire ou un comportement imprĂ©visible dans les processus pĂšre et fils. Cette restriction ne sâapplique pas quand le tampon mĂ©moire pour les E/S O_DIRECT a Ă©tĂ© créé en utilisant shmat (2) ou mmap (2) avec lâattribut MAP_SHARED . Cette restriction ne sâapplique pas non plus quand le tampon mĂ©moire a Ă©tĂ© configurĂ© comme MADV_DONTFORK avec madvise (2), en sâassurant quâil ne sera pas disponible au fils aprĂšs fork (2).
Lâattribut O_DIRECT a Ă©tĂ© introduit par SGI IRIX, qui a des restrictions dâalignement identiques Ă Linux 2.4. IRIX a aussi un appel fcntl (2) pour obtenir les alignements et tailles appropriĂ©s. FreeBSD 4.x a introduit un attribut du mĂȘme nom, mais sans les restrictions dâalignement.
La gestion de O_DIRECT a Ă©tĂ© ajoutĂ©e dans Linux 2.4.10. Les noyaux Linux plus anciens ignorent simplement cet attribut. Certains systĂšmes de fichiers peuvent ne pas gĂ©rer cet attribut et open () Ă©chouera avec lâerreur EINVAL sâil est utilisĂ©.
Les applications devraient Ă©viter de mĂ©langer des entrĂ©es-sorties O_DIRECT et normales pour le mĂȘme fichier, en particulier sur des rĂ©gions dâun mĂȘme fichier qui se recouvrent. MĂȘme si le systĂšme de fichiers gĂšre les problĂšmes de cohĂ©rence dans cette situation, le dĂ©bit global dâentrĂ©es-sorties sera moindre que si un seul mode Ă©tait utilisĂ©. De la mĂȘme façon, les applications devraient Ă©viter de mĂ©langer lâutilisation de mmap (2) et dâentrĂ©es-sorties directes pour les mĂȘmes fichiers.
Le comportement de O_DIRECT avec NFS diffĂšre des systĂšmes de fichiers locaux. Les anciens noyaux, ou les noyaux configurĂ©s dâune certaine façon, peuvent ne pas gĂ©rer cette combinaison. Le protocole NFS ne gĂšre pas le passage de lâattribut au serveur, les entrĂ©es-sorties O_DIRECT ne font donc que le cache des pages du client ; le serveur pourra toujours utiliser un cache pour les entrĂ©es-sorties. Le client demande au serveur de rendre les entrĂ©es-sorties synchrones pour prĂ©server la sĂ©mantique synchrone de O_DIRECT . Certains serveurs fonctionnent mal dans ces circonstances, tout particuliĂšrement si les entrĂ©es-sorties sont de petite taille. Certains serveurs peuvent aussi ĂȘtre configurĂ©s pour mentir aux clients et indiquer que les entrĂ©es-sorties ont atteint un espace de stockage stable ; ceci Ă©vitera la perte de performance en augmentant les risques pour lâintĂ©gritĂ© des donnĂ©es en cas de problĂšme dâalimentation du serveur. Le client NFS Linux nâa pas de restriction dâalignement pour les entrĂ©es-sorties O_DIRECT .
En rĂ©sumĂ©, O_DIRECT est un outil potentiellement puissant qui doit ĂȘtre utilisĂ© avec prĂ©caution. Les applications devraient utiliser O_DIRECT comme une option pour amĂ©liorer les performances et qui est dĂ©sactivĂ©e par dĂ©faut.
BOGUES
Actuellement, il nâest pas possible dâactiver les entrĂ©es-sorties contrĂŽlĂ©es par les signaux en indiquant O_ASYNC lors de lâappel open () ; il faut utiliser fcntl (2) pour activer cet attribut.
Deux codes dâerreur diffĂ©rents â EISDIR et ENOENT â doivent ĂȘtre vĂ©rifiĂ©s pour essayer de dĂ©terminer si le noyau prend en charge la fonctionnalitĂ© O_TMPFILE .
Quand O_CREAT et O_DIRECTORY sont indiquĂ©s dans flags et que le fichier indiquĂ© par pathname nâexiste pas, open () crĂ©era un fichier ordinaire (câest-Ă -dire que O_DIRECTORY est ignorĂ©).
VOIR AUSSI
chmod (2), chown (2), close (2), dup (2), fcntl (2), link (2), lseek (2), mknod (2), mmap (2), mount (2), open_by_handle_at (2), openat2 (2), read (2), socket (2), stat (2), umask (2), unlink (2), write (2), fopen (3), acl (5), fifo (7), inode (7), path_resolution (7), symlink (7)
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>, Frédéric Hantrais <fhantrais@gmail.com>, Jean-Philippe MENGUAL <jpmengual@debian.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 .